在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);
答案 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,所以可能有一种更简单的方法(如果你找到了什么,我很想知道它)