我们从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)
中有一行表示已弃用。
我们的会话设置是否正确?和/或应该更改准则的创建?