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提供了作为adapter
的EntityManager
接口的实现 – 它使用与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或任何其他任何内容,无需更改其他代码。