[英]Hibernate & Apache Struts2 - Transaction not successfully started
我正在嘗試了解Hibernate和Apache Struts2並遇到問題。 我不斷收到此錯誤:
HTTP Status 500 - Transaction not successfully started on line
com.dao.struts.UserSession.list(UserSession.java:58)
休眠助手類:
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;
}
}
就是說,此行中的UserSession.java
中的list()
方法中存在錯誤: session.getTransaction().commit();
它完全可以添加到數據庫中。 我似乎無法輸出它。 我的數據庫名稱是mo
,表名稱是USERS
。 我究竟做錯了什么? 任何幫助,將不勝感激!
似乎您的事務已提交到數據庫。 您可以只檢查事務是否已經提交( 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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.