在 Hibernate 5.2 中,SharedSessionContract.createCriteria(Class persistentClass) 的正确替代方法
我正在从Hibernate 3.x升级到最新的Hibernate 5.2.0 FINAL。在我的旧代码中,我们使用标准查询,如下所示。
Session session =getHibernateTemplate().getSessionFactory().getCurrentSession();
Criteria criteria = session.createCriteria(Employee.class);
criteria.add(Restrictions.eq("Department", department));
return criteria.list();
现在,从Hibernate 5.2.0开始,createCriteria()方法已被弃用。可以从以下文档中找到。
https://docs.jboss.org/hibernate/orm/5.2/javadocs/deprecated-list.html https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/SharedSessionContract.html#createCriteria-java.lang.Class-
文档建议使用 JPA 标准。以下是我基于上述背景的几个问题。
由于我们没有使用EntityManager并且严重依赖于HibernateDAOSupport和HibernateTemplate,我如何通过会话或会话工厂使用JAP标准?
-
如果我使用分离标准,如下面的代码片段所示,它是否与以前的实现相同,或者下面的代码会给我们提供与会话无关的结果?
DetachedCriteria criteria = DetachedCriteria.forClass(Employee.class); criteria.add(Restrictions.eq("Department", department)); return (List<Employee>) getHibernateTemplate().findByCriteria(criteria);
-
同样作为替代方案,如果我以下面提到的方式使用分离标准,它是否会产生与我的旧代码相同的影响。
Session session =getHibernateTemplate().getSessionFactory().getCurrentSession(); DetachedCriteria criteria = DetachedCriteria.forClass(Employee.class); criteria.add(Restrictions.eq("Department", department)); return criteria .getExecutableCriteria(session).list();
如果有更好的方法来解决这个问题,请建议,因为我不想改变HibernateDAOSupport和HibernateTemplate的使用。