不在 Hibernate 中使用 EntityManager 的后果

Consequences of not using an EntityManager with Hibernate

我正在处理现有的大型应用程序,转换为使用 Hibernate 来实现持久性。该应用程序在 Tomcat 中运行,因此我并不是真正在 J2EE 容器环境中,我们也没有使用 Spring。集成 Spring 确实超出了当前项目的范围,并不是一个真正的选择。

我查看了人们如何使用 Hibernate 为其持久层编写 DAO 的各种示例,有些只是使用 SessionFactory 来创建会话,有些则使用 E​​ntityManager。我可以看到如何 bootstrap 一个 EntityManager,但我想知道我是否真的需要这样做?

不使用 EntityManager 的后果是什么?

您可以使用 Hibernate Session,但 API 是特定于 Hibernate 的。 EntityManager 允许 JPA 供应商之间的可移植性,这虽然在理论上很有吸引力,但实际上并不可行,因为无论如何您都需要特定的 API (pooled-lo optimizer, advanced locking features)。

因此,无论您可以使用 EntityManger 做什么,您都可以使用 Hibernate Session,但反之则不行。