gpt4 book ai didi

java - 在 Hibernate 5.2 中正确替代 SharedSessionContract.createCriteria(Class persistentClass)

转载 作者:IT老高 更新时间:2023-10-28 13:48:52 25 4
gpt4 key购买 nike

我正在从 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 标准。以下是我根据上述背景提出的几个问题。

  1. 由于我们不使用 EntityManager 并且严重依赖 HibernateDAOSupport 和 HibernateTemplate ,我如何使用 session 或 sessionFactory 来使用 JAP Criteria ?

  2. 如果我在下面的代码片段中使用 DetachedCriteria,它是否会与之前的实现相同,或者下面的代码会给我们 session 独立的结果?

    DetachedCriteria criteria = DetachedCriteria.forClass(Employee.class);
    criteria.add(Restrictions.eq("Department", department));
    return (List<Employee>) getHibernateTemplate().findByCriteria(criteria);
  3. 另外,如果我以下面提到的方式使用 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 的使用。

最佳答案

使用 CriteriaBuilder,如下所述:

//Use below imports:
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

//creating session. This you can create in your own way.
Configuration cfg = new Configuration();
cfg.configure("hibernate.cfg.xml");
cfg.addAnnotatedClass(Employee.class);

SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();

//**creating CriteriaBuilder**
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Employee> criteria = builder.createQuery(Employee.class);
Root<Employee> employeeRoot=criteria.from(Employee.class);
criteria.select(employeeRoot);

//**Adding where clause**
criteria.where(builder.equal(employeeRoot.get("employeeId"), "E01"));
List<Employee> employeeList=session.createQuery(criteria).getResultList();

关于java - 在 Hibernate 5.2 中正确替代 SharedSessionContract.createCriteria(Class persistentClass),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37857482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com