Hibernate 5和Typed Criteria Queries(JPA2)

Mar*_*rcG 7 java hibernate criteria-api jpa-2.0

问题:

1)如果我从Hibernate 4.x升级到Hibernate 5.x,我还可以使用"旧"Criteria Queries,还是只使用新的Typed JPA2 Criteria Queries?是旧的还是旧的,还是我可以并排使用?

2)我是否正确理解新的Typed Criteria迫使我为每个 Entity类创建第二个类,从而重复了类的数量?我应该手动创建这些类吗?如果没有,怎么样?咆哮:不得不复制课程看起来很奇怪,所以我必须以某种方式误解它?这不是过度杀伤而且不必要的复杂吗?

JB *_*zet 11

  1. 不,旧标准API不会被弃用.只需看看javadoc:没有弃用警告.但我建议坚持使用标准JPA API,而不是使用与专有Hibernate API混合的标准JPA API.

  2. 不,它不会强迫你.您仍然可以使用字符串标识符.但如果以类型安全为目标,强烈建议使用元模型类.

当然,您不需要手动生成这些.它们由注释处理器,实体类及其映射注释生成.您可能会发现它很奇怪,但使用起来root.get(MyEntity_.firstName)比使用起来更安全root.get("firstName"):在编译时检测到拼写错误,如果您重构字段firstname,编译器将生成错误,而不是让您使用旧的"firstName"字符串标识符.

我仍然发现JPQL查询更容易编写,理解和维护,并且只有在必须基于多个...条件生成动态查询时才使用条件API.使用自动化测试来检查查询是否正确.即使使用标准查询,BTW也是如此.

  • 在5.2中,不推荐使用标准API http://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/SharedSessionContract.html#createCriteria-java.lang.Class- (5认同)
  • 是的,当然,因为注释处理器没有通过IDE进行重构.Jeez我真的很讨厌这个新标准.正如您所建议的那样,我们的自动化测试已经立即捕获了任何字符串标识符错误,因此我没有看到改变点.旧Hibernate Criteria的可读性要好得多,这对我们来说最重要.谢谢(你的)信息. (3认同)
  • 旧的Criteria类不会被弃用,但也没有开发那个方向.[5.1指南](http://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/Hibernate_User_Guide.html#criteria)声明"Hibernate提供了一个旧的,传统的org.hibernate.Criteria API,它应该是没有功能开发将针对这些API.最终,特定于Hibernate的标准功能将被移植为JPA javax.persistence.criteria.CriteriaQuery的扩展." (2认同)