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;
}