我知道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是您在数据层实现的规范,用于执行db操作、OR映射和其他必需的任务。
由于它只是一个规范,您需要一个工具来实现它。该工具可以是Hibernate、TopLink、iBatis、spring-data等。
如果您在数据层中使用Hibernate,则不一定需要JPA。但是,如果您为Hibernate使用JPA规范,那么它将使将来切换到其他ORM工具(如iBatis、TopLink)变得容易,因为该规范对其他工具也是通用的。
*(如果你还记得,你导入javax.persistence.*;当你使用注释或映射(如@Id, @列,@GeneratedValue等)在Hibernate,这是你在Hibernate下使用JPA,你可以使用JPA的@查询和其他功能)
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实现的扩展。