【发布时间】:2013-01-13 23:40:09
【问题描述】:
我正在开发一个使用 Hibernate 4.1、Spring 3.1 和 JPA 2.0 的项目,我想验证我从互联网上收集到的信息是否正确。
我正在尝试决定是使用 JPA entityManager 还是使用特定于休眠的 sessionFactory。
起初我计划使用 entityManager 和完整的 JPA 规范,因此我的项目将与 Hibernate 解耦,如果后来有什么想法让我信服,我可以把它换成其他东西,比如 EclipseLink。
然而,entityManager 似乎有一些非常重要的限制。
我的问题:
我想使用完整的 JPA 规范和 entityManager 的唯一原因是能够相对轻松地为不同的 JPA 2.0 兼容 ORM 切换 Hibernate,对吗?使用 entityManager 真的没有性能/功能/易于编程的好处吗?
其次,hibernate sessionFactory 似乎比 entityManager 有很多好处。到目前为止,我遇到了 entityManager 无法执行实体列表的批量插入的问题,我读过 sessionFactory 可以。我还读到 sessionFactory 可以自动返回一个自动生成的实体 ID,而使用 entityManager 您需要结束事务/刷新持久性上下文以提取新生成的 ID。
我喜欢我的项目与 Hibernate 相对分离的想法,但我更希望能够从一开始就编写高效的数据库更新。所以我应该切换到为 hibernate 和 sessionFactory 配置的项目,对吗?
【问题讨论】:
-
以下答案建议使用
entityManager,并在您有特定需求时将其解包到sessionFactory...stackoverflow.com/questions/5640778/… 这似乎有点奇怪,要么你想坚持标准并且只使用entityManager,或者你知道你更喜欢Hibernate的特定功能并且只使用sessionFactory... -
是的,这是个好主意。如果这样做有任何问题,我想有人会在那个线程中提到它。此外,我确实找到了一种让 entityManager 看起来更好的方法。它有 TypedQuery,我认为你不能在会话中使用它。
-
Coray,你最后用了什么?真的没有一个优于另一个的性能优势吗?
-
我现在做了一些项目。我主要使用 JPA entityManager,但我仍然认为没有任何实际的理由这样做。不过,我现在更习惯于使用它,而且我认为它不会有很大的不同(除非你真的需要批量插入东西!)我实际上更喜欢现在使用 Spring Data。它比其他任何一个选项都简化了很多。