【问题标题】:Difference between Hibernate and Hibernate JPAHibernate 和 Hibernate JPA 的区别
【发布时间】:2013-02-06 18:57:41
【问题描述】:

我发现了很多类似的问题

但是没有人回答我的下一个问题。使用 org.hibernate.SessionFactory 和 JPA javax.persistence.EntityManager 实现的经典休眠方法有什么区别?我听说这个 JPA 实现使用 org.hibernate.SessionFactory 并且像包装器一样工作,是真的吗?

【问题讨论】:

    标签: java hibernate jpa orm


    【解决方案1】:

    确实。

    JPA 只是一个 API,它允许您从使用的持久层中抽象出来。 Hibernate 提供了EntityManager 接口的实现,它充当adapter - 它使用与休眠SessionManager 相同的底层方法。

    这个想法是,例如,您可以将实现切换到 Eclipse Link,而不必更改任何源代码。

    【讨论】:

      【解决方案2】:

      JPA 只是一个规范,意味着没有实现。您可以使用 JPA 注释尽可能多地注释您的类,但是如果没有实现,则不会发生任何事情。将 JPA 视为必须遵循的准则或接口,而 Hibernate 的 JPA 实现是符合 JPA 规范定义的 API 并提供底层功能的代码。

      当您将 Hibernate 与 JPA 结合使用时,您实际上是在使用 Hibernate JPA 实现。这样做的好处是您可以将 Hibernate 的 JPA 实现换成 JPA 规范的另一个实现。当您直接使用 Hibernate 时,您将锁定到实现中,因为其他 ORM 可能使用不同的方法/配置和注释,因此您不能只是切换到另一个 ORM。

      【讨论】:

      • 你已经解释得很好了。谢谢!
      【解决方案3】:

      这是你问题的答案

      使用经典的hibernate方法有什么区别
      org.hibernate.SessionFactory 和 JPA javax.persistence.EntityManager
      实施?

      org.hibernate.SessionFactory 
      

      如果您将 undeline ORM 更改为 IBatis(例如),您也需要更改代码。

      javax.persistence.EntityManager 
      

      如果你将 undeline ORM 更改为 IBatis(例如)你不需要更改代码。

      【讨论】:

      • 我已经回答了你的第一个问题。
      【解决方案4】:

      关于你的第一个问题,

      JPA 是一个 Java API 规范,它描述了使用 Java 平台对应用程序中的关系数据进行管理。其中 Hibernate 是一个遵循 JPA 规范的 ORM(对象关系映射)库。

      您可以将 JPA 视为一组由 Hibernate 实现的规则。

      回答你的第二个问题,

      由于 JPA 只是一个抽象的持久层,它需要实现。而 Hibernate 实现了使用 hibernate SessionManager 的 EntityManager 接口。

      通过这种方式,您完全脱离了实现方式,意味着您可以随时切换到任何 Hibernate 或 OenJPA 或任何其他方式,无需额外的代码更改。

      【讨论】:

        猜你喜欢
        • 2011-11-17
        • 2011-08-06
        • 1970-01-01
        • 2011-04-23
        • 2010-10-31
        • 2014-10-15
        • 2012-04-10
        相关资源
        最近更新 更多