Hibernate Native与Hibernate JPA的区别

16

Hibernate官网表示有本地的Hibernate API和JPA实现。Native API和JPA实现有什么区别?有哪些优缺点?

我正在开发一个Spring MVC应用程序,使用Tomcat作为容器,并使用MySQL进行持久化。过去我使用过Doctrine和Entity来处理PHP和.NET代码,采用了Code First方法。现在我想在Java中实现类似的功能。我对Spring比较新手,从未使用过Hibernate。我的团队想使用ORM,而Hibernate似乎是最流行的。我们不确定Hibernate的表现如何,也不知道是否应该使用原生或JPA API。该应用程序将是数据驱动的,包括数据输入、报告等。

我读到了使用JPA可以更容易地切换到另一种JPA实现,但我不知道是否需要这样做。

1个回答

31

JPA 是通过面向对象的 API 访问关系型数据库的标准。Hibernate 是该 API 的一种实现。当你想要使用 JPA 时,你需要一些供应商来实现它,Hibernate 是一个不错的选择,但也有其他的选择,比如 EclipseLink。

Hibernate 存在的时间比 JPA 更长。老的本地 API(它是 JPA 的模型)仍然存在,有时它提供的功能比 JPA 更多(例如孤儿删除)。如果您需要这些功能,则需要使用本地 API。使用 JPA 还有其他的优点,最重要的是(在我看来)更多的开发人员了解它。而且,你仍然可以通过配置使用一些 Hibernate 特定的功能。

总的来说,在我的意见中,使用标准的 API,即 JPA,并根据经验做出适合自己需求的实现决策是值得的。

大多数使用原生 Hibernate 的教程都相当古老 - 就像 Hibernate 3,这是一个 JPA 之前的版本。虽然有很好的理由使用它,但(在我看来)它们通常并不适用于普通用户。因此,如果你刚开始学习这个领域,我建议从 JPA 开始学习。

至于外部资源的推荐:由于某些原因,它们不是这里的话题。但是,当前的官方 Hibernate 文档将是一个不错的开始,还可以搜索至少 Hibernate 4 的教程。


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