【发布时间】:2016-04-29 16:34:17
【问题描述】:
我的团队在 Hibernate 3.x 下使用 hibernate Criteria API 已经很长时间了。最近,我们想将 Hibernate 版本升级到 5,但 Criteria API 似乎不再推荐了。但是 JPA 看起来像一个完全不同的 API,我们不想冒险。我们应该继续使用旧的 Criteria 吗?
【问题讨论】:
我的团队在 Hibernate 3.x 下使用 hibernate Criteria API 已经很长时间了。最近,我们想将 Hibernate 版本升级到 5,但 Criteria API 似乎不再推荐了。但是 JPA 看起来像一个完全不同的 API,我们不想冒险。我们应该继续使用旧的 Criteria 吗?
【问题讨论】:
嗯,Version 5.0 Criteria Chapter 中的警告非常大:
Hibernate 提供了一个旧的、遗留的 org.hibernate.Criteria API,应该被视为已弃用。没有功能开发将针对这些 API。最终,特定于 Hibernate 的标准特性将被移植为 JPA javax.persistence.criteria.CriteriaQuery 的扩展。有关 org.hibernate.Criteria API 的详细信息,请参阅 Legacy Hibernate Criteria Queries。
还有更多:
较旧的 Hibernate org.hibernate.Criteria 查询 API 的用户会认可通用方法,但我们认为 JPA API 更胜一筹,因为它代表了从该 API 中吸取的教训。
所以,这似乎真的取决于您的团队。我花了一段时间才习惯了 JPA API,但现在已经很顺利了。我已经回到 Hibernate 以获得非常大的提取性能,但总的来说,我使用任何 JPA 都没有任何问题。我倾向于使用@NamedQueries 进行基本访问,如果我需要更动态的东西,我倾向于使用Criteria API。
编辑:更新我能够解决性能问题,并且应用程序现在是严格的 JPA。
【讨论】:
如果由于时间限制/项目截止日期/其他风险的原因,您无法将代码从旧版 Hibernate Criteria API 移动到 JPA API,那么您至少应该设置某种时间线来恢复它。 Hibernate 很可能会在接下来的 2 个主要版本中完全放弃弃用的 Criteria API。
【讨论】: