Hibernate和Hibernate JPA之间的区别

我发现了很多类似的问题

  • Hibernate库和Hibernate JPA库之间的区别
  • JPA和Hibernate有什么区别?
  • jpa和hibernate之间的相似性和区别

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

确实。

JPA只是一个API,允许您从使用的持久层中抽象出来。 Hibernate提供了作为adapterEntityManager接口的实现 – 它使用与hibernate SessionManager相同的底层方法。

例如,您可以将实现切换到Eclipse Link,而不必更改任何源代码。

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

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

这是你问题的答案

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

 org.hibernate.SessionFactory 

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

 javax.persistence.EntityManager 

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

至于你的第一个问题,

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

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

并回答你的第二个问题,

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

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