我知道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:就像一个接口,没有具体的实现来使用JPA中的功能。

Hibernate:只是一个JPA提供者,它在JPA中实现了一些功能,并且可以有一些JPA中没有的额外功能。

提示:你可以使用

     *combo 1* : JPA + JPA Provider(Hibernate) 
     *combo 2* : only Hiberante which does not need any interface 

Combo 1:当您觉得您的hibernate没有提供更好的性能,并且希望在不必再次编写JPA时更改JPA Provider时使用。您可以编写另一个JPA Provider…并且可以随心所欲地改变。

Combo 2:很少使用,因为您不打算不惜任何代价更改JPA Provider。

访问http://blog-tothought.rhcloud.com//post/2,你所有的困惑都将得到解答。

其他回答

JPA或Java Persistence API是ORM实现的标准规范,而Hibernate是实际的ORM实现或框架。

JPA is Java Persistence API. Which Specifies only the specifications for APIs. Means that the set of rules and guidelines for creating the APIs. If says another context, It is set of standards which provides the wrapper for creating those APIs , can be use for accessing entity object from database. JPA is provided by oracle.When we are going to do database access , we definitely needs its implementation. Means JPA specifies only guidelines for implementing APIs. Hibernate is a JPA provider/Vendor who responsible for implementing that APIs. Like Hibernate TopLink and Open JPA is some of examples of JPA API providers. So we uses JPA specified standard APIs through hibernate.

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是一个API,由Hibernate实现。Hibernate先于JPA。在JPA之前,您编写本地hibernate代码来执行ORM。JPA只是一个接口,所以现在编写JPA代码并需要找到一个实现。Hibernate恰好是一个实现。

你的选择是这样的: Hibernate, toplink等等…

JPA的优点是它允许您在需要时交换您的实现。缺点是本机hibernate/toplink/等…API可能提供JPA规范不支持的功能。