我发现了很多类似的问题
但没有人回答我的下一个问题。使用org.hibernate.SessionFactory
和JPA javax.persistence.EntityManager
实现的经典hibernate方法有什么不同?我听说,这个JPA实现使用org.hibernate.SessionFactory
并且像包装一样工作,是真的吗?
答案 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(例如),则无需更改代码。