2015-07-09 8 views
1

Я пытаюсь узнать о Hibernate и Apache Struts2 и столкнулся с проблемой. Я получаю эту ошибку:Hibernate & Apache Struts2 - Транзакция не успешно запущена

HTTP Status 500 - Transaction not successfully started on line 
com.dao.struts.UserSession.list(UserSession.java:58) 

Hibernate Helper Класс:

package com.dao.util; 

//imports here 

public class HibHelper 
{ 
    private static SessionFactory sessionFactory = buildSession(); 
    private static ServiceRegistry serviceRegistry; 

    public static SessionFactory buildSession() 
    { 
     try { 
      Configuration config = new Configuration(); 
      config.configure(); 

      serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build(); 
      sessionFactory = config.buildSessionFactory(serviceRegistry); 

      return sessionFactory; 

     } catch (Throwable ex) { 
      throw new ExceptionInInitializerError(ex); 
     } 
    } 

    public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 

    public static void close() { 
     getSessionFactory().close(); 
    } 
} 

UserSession класс

package com.dao.struts; 

//imports here 

public class UserSession extends HibHelper 
{ 
    public Data add(Data user) 
    { 
     Session session = HibHelper.getSessionFactory().openSession(); 
     session.beginTransaction(); 
     session.save(user); 
     session.getTransaction().commit(); 

     session.close(); 
     return user; 
    } 

    public Data delete(Long id) 
    { 
     Session session = HibHelper.getSessionFactory().openSession(); 
     session.beginTransaction(); 

     Data user = (Data) session.load(Data.class, id); 

     if(user != null) 
      session.delete(user); 

     session.getTransaction().commit(); 

     session.close(); 
     return user; 
    } 

    public List<Data> list() 
    { 
     Session session = HibHelper.getSessionFactory().openSession(); 
     session.beginTransaction(); 

     List<Data> userList = null; 

     try { 
      userList = (List<Data>) session.createQuery("from Data").list(); 

     } catch (HibernateException e) { 
      e.printStackTrace(); 
      session.getTransaction().rollback(); 
     } 

     session.getTransaction().commit(); 

     session.close(); 
     return userList; 
    } 
} 

Это говорит ошибка в методе list() в UserSession.java на этой линии: session.getTransaction().commit(); Он отлично добавляет в базу данных. Я просто не могу его выводить. Мое имя базы данных mo и имя таблицы USERS. Что я делаю не так? Любая помощь будет оценена!

ответ

1

Похоже, что ваша транзакция уже совершена к базе данных. Можете ли вы просто проверить, действительно ли транзакция уже совершена (wasCommitted()), и если не выполнить фиксацию?

if(!session.getTransaction.wasCommitted()){ 
session.getTransaction.commit() 
} 

И вы забыли для открытия/закрытия скобки из if правильно. Не следует ли использовать код ниже?

if(user != null){ 
      session.delete(user); 

     session.getTransaction().commit(); 
} 

Из того, что я думаю о проблеме, приведенный ниже код должен работать

 public List<Data> list() { 
    Session session = HibHelper.getSessionFactory().openSession(); 
    session.beginTransaction(); 

    List<Data> userList = null; 

    try { 
     userList = (List<Data>) session.createQuery("from Data").list(); 

       if(!session.getTransaction.wasCommitted()){ 
        session.getTransaction.commit() 
        } 
    } catch (HibernateException e) { 
     e.printStackTrace(); 
     session.getTransaction().rollback(); 
    } 
    session.close(); 
    return userList; 
} 
+0

Я добавил, что к методу списка(), заменяющей 'session.getTransaction(). Совершить() ; ', но я все равно получаю ту же ошибку. – cress

+0

Nice catch с методом удаления. Однако другая проблема все еще стоит. – cress

+0

Большое вам спасибо! Я поставил этот оператор if после try/catch, поэтому он не работал раньше. – cress

Смежные вопросы