【问题标题】:Why need conventional Hibernate?为什么需要传统的 Hibernate?
【发布时间】:2013-01-13 22:07:32
【问题描述】:

据我所知,Hibernate 有两种实现方式

  1. JPA的实现(二)(@Entity,@Table注解)
  2. 对旧(常规)休眠(无 JPA)的扩展,使用 HSQL 查询,没有注释

如果是真的,为什么我们需要第二种类型的实现,而 JPA 是 ORM 规范? 如果您可以在比较它们的同时提供 API 版本,那么我了解 ORM 的整个评估历史会更好吗? 谢谢。

【问题讨论】:

    标签: hibernate jpa orm


    【解决方案1】:

    在 JPA 规范之前,Hibernate 是最早的 ORM 工具之一。它也是 Java 5 之前的开发人员(当注释在 Java 中可用时),所以一切都曾经是基于 XML 配置或 XDoclet。

    对 Java EE 进行了重大改造,大量借鉴了 Spring 和 Hibernate,引入了 JPA,但也足够“通用”,您可以插入自己的实现。

    hibernate 的工作方式并没有真正的区别,只是你使用什么机制来配置它。 JPA 注释现在是标准,但您仍然可以仅在需要时使用 XML。

    【讨论】:

    • hibernate-jpa-2.0-api-1.0.0.Final.jar 是否涵盖了它们?这是最后一个吗?
    【解决方案2】:

    Hibernate 没有两种不同的实现——只有一种官方实现。您可以通过注解/JPA 功能使用 Hibernate,也可以通过显式 Hibernate 类使用 Hibernate;但是底层的 Hibernate 库将是相同的。

    JPA 只是 Hibernate(和其他类似库)实现的接口。

    历史告诉我们,早在九十年代末,有人发明了 EJB。 Java 社区的共识是没有人喜欢它,许多人只是使用 Hibernate 或类似的框架。直到 EJB 3.0 之前,EJB 的持久性几乎都根据 Hibernate 的工作方式进行建模(注意 EJB 中还有其他类型的 bean,而不仅仅是数据映射)。

    【讨论】:

      【解决方案3】:

      据我所知,Hibernate 中的注解是从 3.2 版左右开始引入的;而且我不是在谈论 JPA 注释(javax.persistence 包),而是可以在 hibernate-annotations 包中找到的特定于休眠的注释。

      几乎所有你可以用特定于休眠的注解做的事情,现在你也可以用 JPA2 做。

      如前所述,JPA 只是一个接口,当您编写该接口的代码时,您(至少在理论上)可以更轻松地将底层 ORM 提供程序替换为另一个提供程序,例如 TopLink、OpenJPA 或 Eclipselink (如果需要)

      【讨论】:

        猜你喜欢
        • 2012-01-16
        • 2016-10-03
        • 2019-06-06
        • 2011-02-25
        • 1970-01-01
        • 2015-12-19
        • 2021-02-01
        相关资源
        最近更新 更多