Hibernate & Apache Struts2 - 事务未成功启动
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)
休眠助手Class:
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();
}
}
用户会话class
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
,table 名称是 USERS
。我究竟做错了什么?如有任何帮助,我们将不胜感激!
您的事务似乎已经提交到数据库。您能否只检查事务是否已经提交(wasCommitted()),如果没有提交?
if(!session.getTransaction.wasCommitted()){
session.getTransaction.commit()
}
您是否忘记 open/close 括号 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;
}
我正在尝试学习 Hibernate 和 Apache Struts2 并且遇到了 运行 问题。我不断收到此错误:
HTTP Status 500 - Transaction not successfully started on line
com.dao.struts.UserSession.list(UserSession.java:58)
休眠助手Class:
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();
}
}
用户会话class
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
,table 名称是 USERS
。我究竟做错了什么?如有任何帮助,我们将不胜感激!
您的事务似乎已经提交到数据库。您能否只检查事务是否已经提交(wasCommitted()),如果没有提交?
if(!session.getTransaction.wasCommitted()){
session.getTransaction.commit()
}
您是否忘记 open/close 括号 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;
}