簡體   English   中英

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)

休眠助手類:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM