我发现了很多类似的问题:
但是没有人回答我的下一个问题。使用经典的Hibernate方法,即使用org.hibernate.SessionFactory
,和使用JPA javax.persistence.EntityManager
实现有什么不同?我听说,这个JPA实现使用org.hibernate.SessionFactory
并作为包装器工作,这是真的吗?
我发现了很多类似的问题:
但是没有人回答我的下一个问题。使用经典的Hibernate方法,即使用org.hibernate.SessionFactory
,和使用JPA javax.persistence.EntityManager
实现有什么不同?我听说,这个JPA实现使用org.hibernate.SessionFactory
并作为包装器工作,这是真的吗?
确实。
JPA只是一种API,允许您抽象出所使用的持久化层。Hibernate提供了EntityManager
接口的实现,它充当一个适配器
- 它使用与Hibernate SessionManager
相同的底层方法。
这个想法是,您可以将实现切换到Eclipse Link,而不必更改任何源代码。
这里是你问题的答案
传统的Hibernate方法使用 org.hibernate.SessionFactory,而JPA javax.persistence.EntityManager实现有何不同之处?
org.hibernate.SessionFactory
javax.persistence.EntityManager
如果您将底层ORM更改为IBatis(例如),则无需更改代码。
关键词 | JPA | Hibernate |
---|---|---|
位置 | 在javax.persistence 包中描述 |
在org.hibernate 中描述 |
意图 | 它只是Java规范 | 它是JPA的实现。 |
功能 | 它描述了Java应用程序中处理关系数据的方式 | Hibernate是一种对象关系映射(ORM)工具,用于将Java对象保存在关系数据库系统中 |
标准API | 它是一个标准API,允许执行数据库操作 | 它用于将Java数据类型与SQL数据类型和数据库表进行映射 |
CRUD操作 | 为了对映射的实体类的实例执行CRUD操作,它使用由EntityManagerFactory 提供的EntityManager 接口 |
为了对映射的实体类的实例执行CRUD操作,它使用由SessionFactory 提供的Session 接口 |