使用Hibernate EntityManager(与Hibernate Core相比)有什么缺点吗?

2022-09-03 06:55:27

Hibernate EntityManager 文档指出

您可以结合使用这三者,没有JPA编程接口和生命周期的注释,甚至是纯本机Hibernate Core,具体取决于项目的业务和技术需求。您可以随时回退到 Hibernate 原生 API,或者如果需要,甚至可以回退到原生 JDBC 和 SQL。

使用JPA API(EntityManager)的代码显然更具可移植性(即使偶尔回退到Hibernate Core)。

但是,在使用纯粹的休眠核心时,我会有什么优势吗?我想知道,JPA 2模型是否真的适合在Hibernate Core之上没有任何矛盾?IOW,回退到Core总是容易且没有问题吗?

我主要关心的是:

也许差异不仅在API中,而且在底层语义上?!(例如,可能冲突的不同事务/版本控制/锁定语义:核心文档中提到了悲观锁定,但在EntityManager文档中没有提到 - 所以我仍然可以通过使用悲观锁定来回退到核心而不会引起问题?诸如此类的事情...)


答案 1

但是,在使用纯粹的休眠核心时,我会有什么优势吗?

如果JPA 2.0支持你需要的东西,在我看来,直接使用Hibernate Core没有任何优势(而有了JPA 2.0,差距变得更薄,使得需要回退到Core成为例外,而不是规则,这是一件非常好的事情)。

我想知道,JPA 2模型是否真的适合在Hibernate Core之上没有任何矛盾?

从JPA 1.0开始,Hibernate开发人员创建了Hibernate3,并考虑了“JPA”,并在Hibernate3中采用了JPA语义,默认值等。你可能想听听Gavin在这个技术讲座中:Gavin King on Hibernate3和EJB3

在本次技术讲座中,King 讨论了 Hibernate3 如何构建和扩展 EJB3,并讨论了以下主题:

  • Hibernate3 的新功能
  • Hibernate3 和 JBoss 中的 EJB3 容器之间的关系
  • Hibernate3 与 EJB3 规范的区别是什么
  • Hibernate 的自定义注释在 EJB 外部可用
  • Hibernate的未来

根据我的实践经验,Hibernate与EJB 3并不矛盾的事实是真的。

IOW,回退到Core总是容易且没有问题吗?

无论您是否直接使用 Core,您都在使用它(是 围绕 的包装器)。所以,是的,如果你真的有必要,回到Core很容易(例如,对于仍然不在规范中的东西,比如通过示例查询)。而且,不,这不会引起任何问题(因为您实际上正在JPA中使用它或它的子集)。EntityManagerSession

相关问题


答案 2

很明显:这取决于您项目的业务和技术需求

但是,在使用纯粹的休眠核心时,我会有什么优势吗?

不要忘记Hibernate Annotations和Hibernate EntityManager都是建立在Hibernate核心之上的。所以多了一层。除此之外,它还依赖于存储在XML文件中的映射元数据。一些用户更喜欢使用 XML 文件而不是注释,因为它使域对象完全独立于您选择的 DAO 实现。但是当使用注释时,使用JPA书的Hibernate很清楚

与本机 XML 文件相比,减少用于映射元数据的代码行,并且您可能喜欢更好的批注重构功能

JDBC >> Hibernate core >> Hibernate Annotations

...

JDBC >> Hibernate core >> Hibernate EntityManager

JPA 2 更适合 JPA 1 尚未提供的内容。现在提供了许多新功能,例如

  • 面向对象的查询 API
  • 包装@Embeddable
  • @Embeddables @ElementCollection收集

等等...

不要忘记 JPA EntityManager 允许您使用 getDelegate 方法检索其底层供应商特定的提供程序,如果您需要 JPA 未提供的功能。


推荐