Hibernate 5.2.2中createCriteria()方法的替代代码

时间:2016-09-09 16:11:16

标签: hibernate

在Hibernate 5.2.2中,不推荐使用createCriteria()方法。请提供替代解决方案和代码段。

代码

Criteria criteria=session.createCriteria(Student3.class);   
List<Student3> studentsNameList= criteria.list();           

        for (Student3 studentName : studentsNameList) {
            System.out.println("Student details - "+studentName.getName()+" -- "+studentName.getEmail());   }   

在Google中搜索我发现可以使用DetachedCriteria代替createCriteria(),但它没有list()方法

DetachedCriteria detachedCriteria=DetachedCriteria.forClass(Student3.class);

1 个答案:

答案 0 :(得分:5)

我刚刚完成同样的事情。 Hibernate文档说使用JPA Criteria。这就是我想出来的......

import javax.persistence.criteria.CriteriaQuery;

CriteriaQuery<Student3> cq = session.getCriteriaBuilder().createQuery(Student3.class);
cq.from(Student3.class);
List<Student3> studentsNameList = session.createQuery(cq).getResultList();

for (Student3 studentName : studentsNameList) {
    System.out.println("Student details - "+studentName.getName()+" -- "+studentName.getEmail());   
}   

不那么优雅,但打字。

- Update-- 我还没有深入细节,但这里是我如何添加一个实际的标准:

import javax.persistence.criteria.CriteriaQuery;
CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaQuery<Student3> cq = cb.createQuery(Student3.class);

Root<Student3> studentRoot = cq.from(Student3.class);
ParameterExpression<Integer> id = cb.parameter(Integer.class);

cq.select(studentRoot).where(cb.eq(studentRoot.get("id"),id));

 TypedQuery<Student3> query = em.createQuery(cq);
 query.setParameter(p, 2);
 List<Student3> results = query.getResultList();

同样,我只是在学习JPA,所以可能有一种更简单的方法(如果你找到了什么,我很想知道它)