哪些是hibernate与其他框架或规范之间的差异/相似之处?

时间:2010-04-27 16:57:11

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

我想知道Java EE 5中Hibernate与简单持久性之间的差异/相似之处吗?

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

我对Hibernate及其与Java EE 5教程中给出的关于java持久性的概念的关系感到困惑...你能否阐明Hibernate在实体和EJB环境中的作用?

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

5 个答案:

答案 0 :(得分: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)引用最着名的。

选中此previous answer以获取概述和一些历史背景。

答案 1 :(得分:1)

http://www.hibernate.org

检查此图表

alt text http://www.hibernate.org/mainColumnParagraphs/00/imageBinary/HibernateStacks.png

过去,在古代的J2EE时代,Hibernate在持久性世界中是一个主要玩家。有竞争对手,但持久性代码不可交换。后来,当Java EE 5(J2EE的后继者)正在开发中时,新的Java持久性API(JPA)是在Hibernate的领导者Gavin King的帮助下指定的,其目标是更多地抽象持久性并在单一合同。这样,可以在不更改代码的情况下轻松地在JPA实现之间进行选择和交换(就像使用JDBC API一样)。到目前为止,每个Hibernate JPAEclipseLink(以前称为TopLink)和OpenJPA都属于JPA实现。

我认为你的混淆实际上是在“Good Old”Hibernate和现代Hibernate JPA之间。希望现在已经解决了。

答案 2 :(得分:1)

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

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

JPA的其他实现是:

  • DataNucleus将
  • 的EclipseLink
  • OpenJPA的

其他方法是:

  • JDO
  • iBatis的
  • 普通JDBC

答案 3 :(得分:0)

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

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

就是这样。

答案 4 :(得分:0)

稍微偏离主题,但JPA意味着“面向会话”的架构。那就是你的bean被附加/分离到EntityManager并且你持久化/合并/刷新entityManager。

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