【发布时间】:2013-01-02 14:12:31
【问题描述】:
我有一个使用 Hibernate 4.x 的应用程序,它目前正在使用本机 Hibernate API(这意味着我有一个 SessionFactory 和 Sessions)。我只是 noticed 不推荐使用现有的 Criteria API 以支持 JPA 的(高级)Criteria API:
Hibernate 提供了一个旧的、遗留的
org.hibernate.CriteriaAPI,应该被视为已弃用。没有功能开发将针对这些 API。最终,特定于 Hibernate 的标准功能将被移植为 JPAjavax.persistence.criteria.CriteriaQuery的扩展。
我不想将我的应用程序转换为直接使用EntityManager(尽管很容易从那里获得 Hibernate Session),因为我们有大量的自定义 Hibernate 配置逻辑需要将被替代。尽管如此,我肯定想开始使用 JPA Criteria API,因为旧的 API 已被弃用(如果过去的 Hibernate 版本有任何迹象,可能会在未来的某个随机点消失)并且它们还提供了更好的类型安全性。
如果我使用的是 SessionFactory/Session,如何使用新的 CriteriaQuery/CriteriaBuilder API?
【问题讨论】:
-
您目前的会话如何?它在中心位置吗?如果是这样,您应该能够更改它,以便从 EntityManager 获取会话,以便您可以访问 EM。问题是 Session 由 EntityManager 使用,而不是相反。但是如果你让你的更高级别使用 EntityManager 并从中获取会话(这样你就不会破坏旧代码)你会更好。
-
它位于代码的中心部分,但我担心的部分原因是我们有一个非常复杂的配置系统来配置 Hibernate(以编程方式),我不确定我是否可以复制它JPA。如果不推荐使用 Hibernate 的 Criteria 以支持 JPA 的 Criteria,但无法从 Hibernate API 访问它,我预计他们也会弃用 Hibernate 配置 API(相反,看起来他们正在继续大规模构建休眠配置 API)
-
没错,但您似乎无法以这种方式混合和匹配 JPA 和 Hibernate。即使你得到没有 EntityManager 的 CriteriaQuery 实例,你也需要一个 EM 来执行查询。
标签: hibernate jpa criteria-api