Hibernate和Hibernate JPA之间的区别

时间:2013-02-21 12:39:19

标签: java hibernate jpa orm

我发现了很多类似的问题

但没有人回答我的下一个问题。使用org.hibernate.SessionFactory和JPA javax.persistence.EntityManager实现的经典hibernate方法有什么不同?我听说,这个JPA实现使用org.hibernate.SessionFactory并且像包装一样工作,是真的吗?

4 个答案:

答案 0 :(得分:14)

事实上。

JPA只是一个API,允许您从使用过的持久层中进行抽象。 Hibernate提供EntityManager接口的实现,充当adapter - 它使用与休眠SessionManager相同的基础方法。

我们的想法是,您可以将实现切换到Eclipse Link,而不必更改任何源代码。

答案 1 :(得分:4)

JPA只是一个规范,意味着没有实现。您可以使用JPA注释尽可能多地注释您的类,但是如果没有实现,则不会发生任何事情。将JPA视为必须遵循的准则或接口,而Hibernate的JPA实现是满足JPA规范定义的API并提供引擎功能的代码。

当您在JPA中使用Hibernate时,您实际上正在使用 Hibernate JPA实现。这样做的好处是,您可以将JPA的Hibernate实现替换为JPA规范的另一个实现。当您使用直接 Hibernate时,您将锁定实现,因为其他ORM可能使用不同的方法/配置和注释,因此您不能只切换到另一个ORM。

答案 2 :(得分:2)

至于你的第一个问题,

JPA是一个Java API规范,它描述了使用Java Platform管理应用程序中的关系数据。其中Hibernate是遵循JPA规范的ORM(对象关系映射)库。

您可以将JPA视为一组由Hibernate实现的规则。

回答你的第二个问题,

由于JPA只是一个抽象的持久层,因此需要实现。和Hibernate实现了使用hibernate SessionManager的EntityManager接口。

通过这种方式,您完全脱离了实现方式,意味着您可以随时切换到任何Hibernate或OenJPA或任何其他任何内容,无需更改其他代码。

答案 3 :(得分:1)

以下是您提问的答案

  

使用
的经典hibernate方法之间有什么不同   org.hibernate.SessionFactory和JPA javax.persistence.EntityManager
  执行?

org.hibernate.SessionFactory 

如果您将欠行ORM更改为IBatis(例如),您还需要更改代码。

javax.persistence.EntityManager 

如果您将欠线ORM更改为IBatis(例如),则无需更改代码。