Я обновляю до последнего Hibernate 5.2.0 FINAL из Hibernate 3.x. В моем старом коде мы использовали критерии запросов, как показано ниже.
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 с помощью сеанса или sessionFactory?
-
Если я использую DetachedCriteria, как в приведенном ниже фрагменте кода, он будет таким же, как предыдущая реализация, или приведенный ниже код даст нам независимые от сеанса результаты?
DetachedCriteria criteria = DetachedCriteria.forClass(Employee.class); criteria.add(Restrictions.eq("Department", department)); return (List<Employee>) getHibernateTemplate().findByCriteria(criteria);
-
Также как альтернатива, если я использую DetachedCriteria ниже, это будет иметь то же влияние, что и на мой старый код.
Session session =getHibernateTemplate().getSessionFactory().getCurrentSession(); DetachedCriteria criteria = DetachedCriteria.forClass(Employee.class); criteria.add(Restrictions.eq("Department", department)); return criteria .getExecutableCriteria(session).list();
Если есть лучший способ справиться с этим, предложите, поскольку я не хочу менять использование HibernateDAOSupport и HibernateTemplate.