众所周知,在 Hibernate 5中* 不建议使用 条件查询 。在以前的Hibernate版本中,该功能非常有用。 而且它的性能仍然优于HQL。 * __
那么它在 Hibernate 5中 被弃用的原因是什么?
这是从这里。
Hibernate提供了一个较旧的旧式org.hibernate.CriteriaAPI,应将其视为已弃用。没有针对这些API的功能开发。最终,特定于Hibernate的条件功能将被移植为JPA的扩展 javax.persistence.criteria.CriteriaQuery。有关org.hibernate.CriteriaAPI的详细信息 ,请参见旧式hibernate条件查询。
org.hibernate.Criteria
javax.persistence.criteria.CriteriaQuery
我们不推荐使用Criteria API来代替JPA扩展支持。
考虑一下:
CriteriaBuilder cb = entityManager.getCriteriaBuilder(); HibernateCriteria hc = cb.unwrap( HibernateCriteria.class ); ... query.where( hc.someAwesomeThing( ... ) ); List<SomeEntity> entities = entityManager.createQuery( query ).getResultList();
与评论相反,我们 确实 打算继续提供特定于Hibernate的功能,但我们希望通过标准API引入这些功能,而不是试图保持两个完全不同的API,这些API旨在实现同步互补。