JPA和Hibernate有什么区别?
我知道JPA 2是一个规范,Hibernate是一个ORM的工具。 另外,我明白Hibernate比JPA 2具有更多的功能。但从实际角度来看,真正的区别是什么?
我有使用iBatis的经验,现在我正在尝试学习Hibernate或JPA2。 我拿起了Pro JPA2书,它一直提到“JPA provider”。 例如:
如果您认为某项功能应该标准化,您应该向JPA提供商说出要求并提出要求
这使我困惑,所以我有几个问题:
正如你所说的JPA只是一个规范,这意味着没有实现。 您可以使用JPA批注尽可能多地注释类,但是如果没有实现,则不会发生任何事情。 将JPA视为必须遵循的准则或接口,而Hibernate的JPA实现是符合JPA规范定义的API的代码,并提供了引擎盖下的功能。
当你在JPA中使用Hibernate时,你实际上正在使用Hibernate JPA实现。 这样做的好处是您可以将Hibernate的JPA实现换成JPA规范的另一个实现。 当你使用直接Hibernate时,你会锁定实现,因为其他ORM可能使用不同的方法/配置和注释,因此你不能切换到另一个ORM。
有关更详细的说明,请阅读我的博客条目。
JPA是舞蹈,Hibernate是舞蹈演员。
没有对JCP的语言和理解的历史观点,有些事情是太难理解了。
通常有第三方开发可执行功能或填补不属于官方JDK组成部分的软件包。 由于各种原因,该功能可能通过JCP(Java Community Process)成为Java JDK的一部分,
Hibernate(2003年)提供了一种抽象SQL的方法,并允许开发人员从持久对象(ORM)角度考虑更多。 你通知hibernate关于你的实体对象,它会自动生成持久化策略。 Hibernate提供了一个实现来实现这个功能,API提供了通过XML配置或注释驱动实现。
现在的基本问题是,你的代码与特定的供应商(Hibernate)紧密结合,因为许多人认为应该更通用。 因此需要一个通用的持久性API。
与此同时,来自Hibernate和其他ORM工具供应商的大量输入的JCP正在开发JSR 220(Java规范请求),这导致了JPA 1.0(2006)以及最终JSR 317(它是JPA 2.0(2009))。 这些是通用Java持久性API的规范。 API在JDK中作为一组接口提供,以便您的类可以依赖javax.persistence,而不必担心正在执行持久化对象工作的特定供应商。 这只是API而不是实现。 Hibernate现在成为实现JPA 2.0规范的许多供应商之一。 您可以向JPA编码并选择符合您需求的任何符合要求的ORM供应商。
有些情况下Hibernate可能会给你没有编入JPA的功能。 在这种情况下,您可以选择直接在您的类中插入Hibernate特定注释,因为JPA不提供执行此操作的界面。
资料来源:http://www.reddit.com/r/java/comments/16ovek/understanding_when_to_use_jpa_vs_hibernate/
链接地址: http://www.djcxy.com/p/37007.html上一篇: What's the difference between JPA and Hibernate?
下一篇: Is it possible to have immutable fields in Hibernate/JPA?