Hibernate EntityManager文档指出:
您可以结合使用这三种方式,而没有JPA编程接口和生命周期的注释,甚至纯本地的Hibernate Core,取决于项目的业务和技术需求。您可以随时使用Hibernate本机API,或者根据需要甚至使用本机JDBC和SQL。
使用JPA API(EntityManager)的代码显然更具可移植性(即使偶尔回退到Hibernate Core)。
但是使用纯Hibernate Core时我有什么优势吗?我想知道,JPA 2模型是否真的适合Hibernate Core且没有任何矛盾?IOW,回退到Core总是容易且没有问题吗?
我主要关心的是:
也许差异不仅在于API,还在于底层 语义 。(例如,可能发生冲突的不同事务/版本/锁定语义:Core文档中提到了悲观锁定,而EntityManager文档中没有提到过- 因此我仍然可以使用悲观锁定而回退到Core而不会引起问题吗? )
但是使用纯Hibernate Core时我有什么优势吗?
如果JPA 2.0支持您所需要的东西,那么我认为直接使用Hibernate Core没有任何优势(并且与JPA 2.0相比,差距变得越来越小,这使得需要回退到Core作为例外而不是常规,这是非常重要的)好东西)。
我想知道,JPA 2模型是否真的适合Hibernate Core且没有任何矛盾?
从JPA 1.0开始,Hibernate开发人员就在创建Hibernate3时就牢记“ JPA”,并在Hibernate3中采用了JPA语义,默认值等。您可能想在以下技术讲座中收听Gavin :Hibernate3和EJB3上的Gavin King:
在本技术演讲中,King讨论 了Hibernate3如何在EJB3上构建和扩展 ,并讨论了以下主题: Hibernate3的新功能 Hibernate3和JBoss中的EJB3容器之间的关系 Hibernate3与EJB3规范的不同之处 Hibernate的定制注释可在EJB外部使用 Hibernate的未来
在本技术演讲中,King讨论 了Hibernate3如何在EJB3上构建和扩展 ,并讨论了以下主题:
而且,根据我的实际经验,Hibernate与EJB 3并不矛盾。
IOW,回退到Core总是容易且没有问题吗?
无论您是否直接使用Core,您 都在 使用它(EntityManager包裹着Session)。因此,是的,如果确实需要,可以很容易地退回到Core(例如,对于规范中仍然没有的示例,例如“按示例查询”)。而且,不,这不会引起任何问题(因为您实际上在JPA中使用它或其一部分)。
EntityManager
Session