我知道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是一个标准化orm - api的规范。Hibernate是JPA实现的供应商。因此,如果您将JPA与hibernate一起使用,您可以使用标准的JPA API, hibernate将在引子之下,提供更多的非标准函数。 参见http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html_single/和http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/

其他回答

Java——它不仅独立于操作系统,而且独立于供应商。

因此,您应该能够在不同的应用程序服务器上部署应用程序。 JPA是在任何Java EE兼容的应用服务器上实现的,它允许交换应用服务器,但是实现也会发生变化。Hibernate应用程序可能更容易部署在不同的应用程序服务器上。

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

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

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

JPA是舞蹈,Hibernate是舞者。