从Hibernate 5.2起,现在不推荐使用此代码:
return (Long) sessionFactory.getCurrentSession().createCriteria(mainType)
.setProjection(Projections.rowCount())
.uniqueResult();
去除折旧的正确/惯用方式是什么?
Hibernate API源代码中的注释只是说:
@自5.2起已弃用会话,请使用JPA标准
我意识到有一个叫做 JPA Criteria Builder 的东西。不幸的是,它的名称错误,因为它没有建立 JPA标准。但是,它可以返回 JPA标准查询:
CriteriaQuery<T> criteriaQuery = sessionFactory.getCriteriaBuilder().createQuery(mainType);
但是,这是一个死胡同,因为缺少setProjection()
方法。
请注意,我的问题专门限于Hibernate 5.2+上的条件查询。这个问题有一个更广泛,更旧的版本(How do we count rows using older versions of Hibernate (~2009)?)