为什么在Hibernate 5中标准查询被弃用?

39
正如我们所知,criterion queryHibernate 5中已经被弃用。它是在以前的Hibernate版本中非常有用的一个特性。而且它仍然比HQL表现更好。 那么Hibernate 5为什么会废弃它呢?
此外,这个问题不是这个问题 的重复,因为我想知道criteria查询被废弃的原因。
这来自于这里。

Hibernate提供了一个旧的、遗留的org.hibernate.Criteria API,应该被视为已经废弃。没有特性开发将针对这些API。最终,Hibernate特定的criteria特性将作为扩展移植到JPA javax.persistence.criteria.CriteriaQuery中。有关org.hibernate.Criteria API的详细信息,请参见遗留Hibernate Criteria查询。


可能是重复的问题 - Hibernate 5 和 Typed Criteria Queries (JPA2) - Mick Mnemonic
docs中可以看到: "新的开发应该专注于JPA javax.persistence.criteria.CriteriaQuery API。最终,Hibernate特定的criteria功能将作为扩展移植到JPA javax.persistence.criteria.CriteriaQuery中。" 此外,如果您想编写易读的查询(而不是使用笨重的Criteria API),可以查看QueryDSL - Mick Mnemonic
@MickMnemonic 不完全是重复的。我编辑了我的问题。 - Pritam Banerjee
2
我认为你引用的文档部分已经很清楚了:他们不再想开发针对Hibernate特定的功能,而是鼓励用户使用接口(JPA)进行编码。现有的功能仍然可以在Hibernate 5中使用。 - Mick Mnemonic
1个回答

22
我们计划废弃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旨在互补。


29
目前我的项目使用了已经弃用的Criteria API。根据最新的建议,是否建议重写查询语句并使用HQL或CriteriaBuilder? - Justinas Jakavonis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接