Hibernate 5.2.0会话管理

时间:2019-05-08 19:16:32

标签: hibernate

我们从Hibernate 3.5.0升级到5.2.0已有一段时间,而且内部一切正常。但是在野外,我们间歇地看到

createCriteria is not valid without active transaction

在Hibernate中似乎有多种管理会话的方法,并且版本之间似乎有所不同,因此,试图找到正确的信息以使升级顺利进行会有些麻烦。

在遇到此错误的情况下,可以从以下流程中看到它:

基地岛:

package com.mycom.hibernate;

import java.io.Serializable;
import java.util.*;

import org.hibernate.*;

public class BaseHibernateDAO implements Serializable {

    private Session session = null;

    public Session getCurrentSession() {
        if (session == null || !session.isOpen()) {
            session = HibernateSessionFactory.getInstance().getCurrentSession();
        }
        if(!session.getTransaction().isActive()) {
            session.beginTransaction();
        }
        return session;
    }

    public void commitCurrentSession() {
        this.getCurrentSession().getTransaction().commit();
    }

}

然后导出dao:

public class DerivedDAO extends BaseHibernateDAO {
    public List someMethod() {
        Criteria criteria = getCurrentSession().createCriteria(MyClass.class);
        // more code
        commitCurrentSession();
    }
}

我假设在5.2.0中我们没有以正确的方式进行某些操作,特别是因为派生类中的createCriteria(MyClass.class)中有一行表示已弃用。

我们的会话设置是否正确?和/或应该更改准则的创建?

0 个答案:

没有答案