我知道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注释注释您的类,但是如果没有实现,什么也不会发生。将JPA视为必须遵循的指导方针或接口,而Hibernate的JPA实现是满足JPA规范定义的API并提供底层功能的代码。

当您将Hibernate与JPA一起使用时,您实际上是在使用Hibernate JPA实现。这样做的好处是,您可以将Hibernate的JPA实现替换为JPA规范的另一个实现。当你直接使用Hibernate时,你锁定在实现中,因为其他ORM可能使用不同的方法/配置和注释,因此你不能直接切换到另一个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.

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

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

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

正如您所说,JPA只是一个规范,这意味着没有实现。您可以尽可能多地使用JPA注释注释您的类,但是如果没有实现,什么也不会发生。将JPA视为必须遵循的指导方针或接口,而Hibernate的JPA实现是满足JPA规范定义的API并提供底层功能的代码。

当您将Hibernate与JPA一起使用时,您实际上是在使用Hibernate JPA实现。这样做的好处是,您可以将Hibernate的JPA实现替换为JPA规范的另一个实现。当你直接使用Hibernate时,你锁定在实现中,因为其他ORM可能使用不同的方法/配置和注释,因此你不能直接切换到另一个ORM。

要了解更详细的描述,请阅读我的博客。

形象地说,JPA只是接口,Hibernate/TopLink类(即接口实现)。

必须有接口实现才能使用接口。但是你可以通过接口使用类,即通过JPA API使用Hibernate,或者你可以直接使用实现,即直接使用Hibernate,而不是通过纯JPA API。

关于JPA的好书是Vlad Mihalcea的《高性能Java持久性》。