Hibernate 3.5 / JPA 2.0 的区别

12

到目前为止,我总是更喜欢直接使用Hibernate而不是JPA 1.0,因为JPA缺少我所需要的一些重要功能,而Hibernate提供了:Criteria API、二级缓存、单向OneToMany等几个功能。

现在,随着JPA 2.0的推出以及随之而来的所有新功能(最初在JPA 1.0中缺失)(http://en.wikibooks.org/wiki/Java_Persistence/What_is_new_in_JPA_2.0%3F),我想知道是否仍然有必要直接使用Hibernate。

你的意见是什么?在Hibernate 3.5中还有哪些功能是我不能使用JPA 2.0实现的?

2个回答

14
现在,随着JPA 2.0的出现以及所有新功能的到来,这些功能最初在JPA 1.0中缺失(http://en.wikibooks.org/wiki/Java_Persistence/What_is_new_in_JPA_2.0%3F),我想知道是否仍然有必要直接使用Hibernate。
即使对于JPA 1.0,我也建议采用不同的方法:“尽可能使用JPA,在必要时使用Hibernate”。
你的意见是什么?Hibernate 3.5中还剩下什么是我无法使用JPA 2.0实现的?
JPA 2.0非常丰富,我认为它是一个巨大的改进,许多以前需要使用专有扩展的功能现在已经标准化(请参见this previous answer)。
但在某些情况下,您可能仍然需要一些Hibernate特定的扩展:自定义UserType、非标准生成器、示例查询、@Formula、@Index等。更多“示例”请参阅Section 2.4,“Hibernate注释扩展”

但是让我坚持认为,如果可以的话,建议使用JPA,如果必须使用Hibernate(随着JPA 2.0的推出,后者变得越来越薄弱)。


我认为Hibernate是JPA的实现,而Hibernate可以带来一些扩展。因此,我真的不明白如何在没有Hibernate或者EclipseLink、OpenJPA等的情况下使用JPA。 - LancerX

6
EclipseLink项目上,我们一直专注于一种策略,即用户尽可能地坚持使用JPA,并且我们一直在努力通过扩展使我们的许多高级功能易于使用,以便您可以最小化使用我们的本机API。显然,作为JPA参考实现,我们需要合规,但是JPA提供了几个扩展点,我们利用了这些扩展点,包括查询提示和持久性单元属性。一些功能是通过EclipseLink JPA特定的注释和/或eclipselink-orm.xml以及API启用的,但是正如JPA 2.0所述,其中许多功能可以通过标准配置处理。
最终的好处是,尽可能保持符合标准,您可以利用共同的知识库以及工具和集成。高级ORM功能也非常重要,但只有在高级情况下才需要,并且使用应该得到良好隔离并具有最小耦合。
道格

这很有帮助,但它并没有真正回答问题。无论如何感谢。 - jplandrain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接