Hibernate SessionFactory vs EntityManagerFactory [重复]

Posted

技术标签:

【中文标题】Hibernate SessionFactory vs EntityManagerFactory [重复]【英文标题】:Hibernate SessionFactory vs EntityManagerFactory [duplicate] 【发布时间】:2014-06-20 04:22:21 【问题描述】:

我一直在处理这个问题,Hibernate SessionFactoryJPA 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方法

Hibernate Sessionfactory 重启 |春天

hibernate4 sessionFactory