0

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

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

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

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

4

4 回答 4

4

我想知道 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),举几个例子。

检查此先前的答案以获取概述和一些历史背景。

于 2010-04-27T22:52:02.500 回答
1

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

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

JPA 的其他实现是:

  • 数据核
  • EclipseLink
  • OpenJPA

其他方法是:

  • JDO
  • iBatis
  • 普通的 JDBC
于 2010-04-27T22:51:00.600 回答
0

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

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

这就对了。

于 2010-04-27T22:58:07.233 回答
0

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

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

于 2010-05-05T22:28:59.323 回答