【问题标题】:Which are the differences/similarities between hibernate and other frameworks or specifications?hibernate 和其他框架或规范之间有哪些不同/相似之处?
【发布时间】:2010-04-27 16:57:10
【问题描述】:

我想知道 Java EE 5 中 Hibernate 和简单持久性之间的区别/相似之处?

我不清楚 Hibernate 是否实现了 Java EE 5 持久性实现,或者它是否是一种完全不同的后端系统数据表示方法。

我对 Hibernate 及其与 Java EE 5 教程中给出的 Java 持久性概念的关系感到困惑……您能否阐明 Hibernate 在实体和 EJB 上下文中的作用?

另外,我想知道其他方法(框架),如 JPA 或 Spring...

【问题讨论】:

    标签: hibernate jpa jakarta-ee persistence java-ee-5


    【解决方案1】:

    我想知道 Java EE 5 中 Hibernate 和简单持久性之间的区别/相似之处?

    Java EE 5 的标准化持久化API是JPA 1.0,是EJB 2 CMP、JDO、Hibernate、TopLink API 和产品的一种统一版本。 Hibernate 是一个早于 JPA 的 ORM 框架,对 JPA 的规范产生了重大影响(Hibernate 的创建者是 JPA 背后专家组的成员)。请记住,JPA 只是一个 API,您需要 JPA 的实现才能使用它。

    我不清楚 Hibernate 是否实现了 Java EE 5 持久性实现,或者它是否是一种完全不同的后端系统数据表示方法。

    是的,Hibernate 通过 Hibernate EntityManager 项目(依赖于 Hibernate Core)提供了 JPA 的实现(并且还扩展了它,Hibernate 是 JPA 的超集) .

    我对 Hibernate 及其与 Java EE 5 教程中给出的 Java 持久性概念的关系感到困惑……您能否阐明 Hibernate 在实体和 EJB 上下文中的作用?

    Hibernate 可以用作 JPA 持久性提供程序,即作为实际持久化 EJB 3 实体的代码片段(JPA 规范是 1.0 版 EJB 3.0 规范的一部分,现在它是一个单独的规范)

    另外,我想知道其他方法(框架),如 JPA 或 Spring...

    Spring 不是一个持久化框架,Spring 是一个 IoC 容器,它不与 Hibernate 竞争。

    与 JPA 兼容的 Hibernate 替代方案包括 TopLink Essentials(Java EE 5 中的 RI)、EclipseLink(也是 Java EE 6 中 JPA 2.0 的 RI)、OpenJPA、DataNucleus。

    其他持久性选项包括 JDO(另一种标准化的持久性 API)、iBATIS(不是 ORM,它更像是一个数据映射器)、JDBC(低级 API),举个最有名的例子。

    查看此previous answer 了解概览和一些历史背景。

    【讨论】:

      【解决方案2】:

      当 JCP 专家组 (JSR 220) 开发 JPA(Java EE 5 持久性标准)时,很多想法都来自现有的 Hibernate(也来自 JDO)。 Hibernate 的创始人 Gavin King 本人也是专家组的一员。

      在最终的 JPA 规范发布后,Hibernate 成为了它的开源实现(从 3.2 版开始)。 Hibernate 仍然具有更丰富的功能集,并且通常会更快地生成新功能,因为开源开发过程往往比 Java 社区过程更快。

      JPA 的其他实现有:

      • 数据核
      • EclipseLink
      • OpenJPA

      其他方法有:

      • JDO
      • iBatis
      • 普通 JDBC

      【讨论】:

        【解决方案3】:

        EE5 中描述的 JPA 规范只是一个规范。这意味着它不是产品。 JPA 只是不同提供商必须完成的一组定义才能成为“JPA 投诉”

        Hibernate 只是另一个“可插入的”持久性提供程序,这意味着该产品实现了 JPA 规范给出的定义。您可以找到其他类似产品,例如 TopLink 或 Apache 的 OpenJPA。

        就是这样。

        【讨论】:

          【解决方案4】:

          有点离题,但 JPA 暗示了“面向会话”的架构。也就是说,您的 bean 已附加/分离到 EntityManager,并且您坚持/合并/刷新 entityManager。

          如果您正在寻找 ORM 的“无会话”方法(没有附加/分离的持久化/合并/刷新),那么您还可以查看 Ebean ORM,它也使用 JPA 注释进行映射。您也可以将其描述为“Ebean 提供持久性上下文的自动管理”。

          【讨论】:

            猜你喜欢
            • 2018-04-21
            • 2018-02-08
            • 2014-03-20
            • 2010-10-28
            • 2013-03-10
            • 2019-10-02
            • 2017-05-22
            • 2019-09-25
            • 2011-12-30
            相关资源
            最近更新 更多