我发现很多类似的问题
- Difference between Hibernate library and Hibernate JPA library
- What's the difference between JPA and Hibernate?
- similarity and difference between jpa and hibernate
但是没有人回答我的下一个问题。使用org.hibernate.SessionFactory
的经典Hibernate方法和JPA javax.persistence.EntityManager
实现之间有什么区别?我听说,这个JPA实现使用org.hibernate.SessionFactory
并且像 Package 器一样工作,它是真实的的吗?
5条答案
按热度按时间9jyewag01#
确实如此。
JPA只是一个API,允许您从所使用的持久层中进行抽象。Hibernate提供了
EntityManager
接口的实现,该实现充当adapter
-它使用与HibernateSessionManager
相同的底层方法。例如,您可以将实现切换到EclipseLink,而不必更改任何源代码。
ie3xauqp2#
JPA只是一个规范,意味着没有实现。您可以使用JPA注解对类进行任意多的注解,但是如果没有实现,则什么都不会发生。可以将JPA视为必须遵循的准则或接口,而Hibernate的JPA实现是符合JPA规范定义的API的代码,并提供了底层功能。
将Hibernate与JPA一起使用时,实际上使用的是Hibernate JPA实现。这样做的好处是,可以将Hibernate的JPA实现替换为JPA规范的另一个实现。直接使用Hibernate时,您将锁定在实现中,因为其他ORM可能使用不同的方法/配置和注解,因此您无法切换到另一个ORM。
rkue9o1l3#
这是你问题的答案
经典的Hibernate方法与使用
会话工厂和实体管理器
执行情况?
如果你把下层ORM改为IBatis(例如),你也需要修改代码。
如果你把下层ORM改为IBatis(例如),你不需要改变代码。
dxpyg8gm4#
关于你的第一个问题,
JPA是一个Java API规范,它描述了使用Java平台管理应用程序中的关系数据。其中Hibernate是一个遵循JPA规范的ORM(对象关系Map)库。
您可以将JPA视为一组由Hibernate实现的规则。
回答您第二个问题,
由于JPA只是一个抽象的持久层,因此它需要实现。而Hibernate实现了使用Hibernate SessionManager的EntityManager接口。
这样,你就完全脱离了实现方式,意味着你可以随时切换到Hibernate或OenJPA中的任何一个或任何其他你想要的,不需要额外的代码修改。
bbmckpt75#
| 保留字|JPA协议|休眠模式|
| - -|- -|- -|
| 位置|在
javax.persistence
包中描述|描述于org.hibernate
|| 目的|这只是Java规范|它是JPA的一个实现。|
| 功能性|它描述了Java应用程序中关系数据的处理|Hibernate是一个对象关系Map(ORM)工具,用于在关系数据库系统中保存Java对象|
| 标准API|它是一个允许执行数据库操作的标准API|它用于将Java数据类型与SQL数据类型和数据库表进行Map|
| CRUD动作|为了对Map实体类的示例执行CRUD操作,它使用
EntityManagerFactory
提供的EntityManager
接口|为了对Map实体类的示例执行CRUD操作,它使用SessionFactory
提供的Session
接口|