【问题标题】: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 的其他实现有:
其他方法有:
【解决方案3】:
EE5 中描述的 JPA 规范只是一个规范。这意味着它不是产品。 JPA 只是不同提供商必须完成的一组定义才能成为“JPA 投诉”
Hibernate 只是另一个“可插入的”持久性提供程序,这意味着该产品实现了 JPA 规范给出的定义。您可以找到其他类似产品,例如 TopLink 或 Apache 的 OpenJPA。
就是这样。
【解决方案4】:
有点离题,但 JPA 暗示了“面向会话”的架构。也就是说,您的 bean 已附加/分离到 EntityManager,并且您坚持/合并/刷新 entityManager。
如果您正在寻找 ORM 的“无会话”方法(没有附加/分离的持久化/合并/刷新),那么您还可以查看 Ebean ORM,它也使用 JPA 注释进行映射。您也可以将其描述为“Ebean 提供持久性上下文的自动管理”。