为啥需要传统的 Hibernate?

Posted

技术标签:

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

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

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

如果是真的,为什么我们需要第二种类型的实现,而 JPA 是 ORM 规范? 如果您可以在比较它们的同时提供 API 版本,那么我了解 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 (如果需要)

【讨论】:

以上是关于为啥需要传统的 Hibernate?的主要内容,如果未能解决你的问题,请参考以下文章

求教第一个hibernae程序的配置文件hibernate.cfg.xml出错了,求帮忙解决,如下

Hibernae

Hibernaate 详解

Hibernate之总结

5 -- Hibernate的基本用法 --3 Hibernate的体系结构

hibernate