我知道JPA 2是一个规范,Hibernate是ORM的工具。另外,我知道Hibernate比JPA 2有更多的特性。但从实际的角度来看,两者到底有什么区别呢?

我有使用iBatis的经验,现在我正在尝试学习Hibernate或JPA2。我拿起Pro JPA2书,它一直提到“JPA提供商”。例如:

如果你认为一个特性应该标准化,你应该说出来 并向您的JPA提供者请求它

这让我很困惑,所以我有几个问题:

仅使用JPA2,我可以通过简单地注释POJO从DB中获取数据 JPA2应该与“JPA提供者”一起使用吗?例如TopLink或Hibernate?如果是这样,那么与单独使用JPA2或单独使用Hibernate相比,使用JPA2 + Hibernate有什么好处? 你能推荐一本好的实用的JPA2书吗?“Pro JPA2”看起来更像是JPA2的圣经和参考书(直到本书的后半部分才进入查询)。有没有关于JPA2的问题/解决方法的书?


当前回答

JPA是规范,Hibernate是遵循规范中规定的规则的实现提供者。

其他回答

JPA只是一个需要具体实现的规范。 现在oracle提供的默认实现是“Eclipselink”。(Toplink由Oracle捐赠给Eclipse基金会,与eclipselink合并)

(参考:http://www.oracle.com/technetwork/middleware/toplink/index-085257.html http://www.eclipse.org/org/press-release/20080317_Eclipselink.php )

使用Eclipselink,可以确保代码在需要时可以移植到任何实现。 Hibernate也是一个完整的JPA实现+ MORE (JPA Plus的一种)。Hibernate是JPA的超级集,具有一些额外的Hibernate特定功能。 因此,在Hibernate中开发的应用程序在切换到其他实现时可能不兼容。 hibernate仍然是大多数开发人员作为JPA实现的选择,并被广泛使用。

另一个JPA实现是OpenJPA (openjpa.apache.org),它是Kodo实现的扩展。

JPA是接口,Hibernate是该接口的一个实现。

JPA只是一个规范。在市场上有许多实现JPA的供应商。不同类型的供应商以不同的方式实现JPA。所以不同类型的供应商提供不同的功能,所以根据您的需求选择合适的供应商。

如果您正在使用Hibernate或任何其他供应商而不是JPA,那么您不能轻松地将Hibernate迁移到EclipseLink或OpenJPA迁移到Hibernate。但是如果您使用JPA,您只需要在持久性XML文件中更改提供。因此在JPA中很容易实现迁移。

JPA是规范,Hibernate是遵循规范中规定的规则的实现提供者。

来自维基。

Motivation for creating the Java Persistence API Many enterprise Java developers use lightweight persistent objects provided by open-source frameworks or Data Access Objects instead of entity beans: entity beans and enterprise beans had a reputation of being too heavyweight and complicated, and one could only use them in Java EE application servers. Many of the features of the third-party persistence frameworks were incorporated into the Java Persistence API, and as of 2006 projects like Hibernate (version 3.2) and Open-Source Version TopLink Essentials have become implementations of the Java Persistence API.

正如JCP页面所述,Eclipse链接是JPA的参考实现。再看看这个答案。

JPA本身具有弥补标准ORM框架的功能。由于JPA是Java EE规范的一部分,您可以在项目中单独使用JPA,并且它应该与任何Java EE兼容的服务器一起工作。是的,这些服务器将拥有JPA规范的实现。

Hibernate是最流行的ORM框架,一旦JPA引入,Hibernate就符合JPA规范。除了它应该遵循的基本规范集之外,hibernate还提供了大量额外的东西。