Hibernate SessionFactory vs EntityManagerFactory [重复]
Posted
技术标签:
【中文标题】Hibernate SessionFactory vs EntityManagerFactory [重复]【英文标题】:Hibernate SessionFactory vs EntityManagerFactory [duplicate] 【发布时间】:2014-06-20 04:22:21 【问题描述】:我一直在处理这个问题,Hibernate SessionFactory 和 JPA EntityManagerFactory 之间的鸟瞰区别在于 JPA 是标准的。您可以使用它而不必担心底层 ORM。但是它在后台调用了底层的 sessionFactory。(如果我错了,请纠正我)
但是如果有人知道他将来只是坚持使用hibernate作为ORM,那么他应该从这两个工厂中选择什么,为什么?
其次,这两者在性能、特性、稳定性等方面还有哪些其他区别?
【问题讨论】:
大概是因为这个问题已经在这里被问过很多次了,所以投反对票的人投票了,简单的搜索会告诉你你需要知道什么(使用搜索是否“需要勇气”? )。但是你必须问他们为什么...... 所以如果我告诉你我做了所有的搜索,我想知道一些以前没有问过的具体方面,比如两个的性能 n 特征。如果您认为同一个问题以完全相同的方式被问了很多次,请标记并告诉我们重复的问题。但我相信,否决票意味着不值得在 SO 上发布的问题。我知道它的价值并在网上搜索了很多。 【参考方案1】:您应该更喜欢标准的 JPA API 而不是专有的 Hibernate API,原因如下:
-
它让您学到一些可以在更多其他项目中重复使用的东西,依赖于不同的实现
JPA API 比 Hibernate 更干净:它没有 Hibernate API 的早期错误
现在的努力和发展都针对 JPA API。例如,标准 JPA2 标准 API 比旧的专有 Hibernate Criteria API 更完整(但使用起来更复杂,恕我直言)
如果需要,您始终可以从 JPA EntityManager 获取休眠会话。反之亦然
无论如何,大部分工作都在映射实体本身,这是使用标准 JPA 注释完成的,即使在使用 Session API 时也是如此。
【讨论】:
请原谅我对 JPA 大哥的了解较少。当从 JPA 工厂而不是直接从 Hibernate 工厂获取会话时,性能或效率会有什么影响? 不会有任何明显的差异。这无论如何都不应该发生。使用数据库的应用程序中大部分时间是执行查询。 感谢您宝贵的时间并教我这些东西 :-) @JBNizet 当使用EntityManager
而不是Hibernate Session
时,我们如何使用Plain JDBC Thread-bound策略实现事务划分,如图here?
@JBNizet 我正在使用 JavaSE 创建一个项目,因此无法使用 EJB/CMT(托管环境)进行划分!而且,在非托管环境中使用this type of demarcation 不会像this 那样干净,因为我们不需要像使用EntityManager
那样关闭Session
!以上是关于Hibernate SessionFactory vs EntityManagerFactory [重复]的主要内容,如果未能解决你的问题,请参考以下文章
无法实例化 [org.hibernate.SessionFactory]
Spring+Hibernate,Autowire sessionFactory 到 hibernate DAO
hibernate中关于sessionFactory中session方法问题
hibernate4.3版本构造SessionFactory方法