Hibernate与Hibernate JPA之间的差异

s8vozzvw  于 2022-11-14  发布在  其他
关注(0)|答案(5)|浏览(182)

我发现很多类似的问题

但是没有人回答我的下一个问题。使用org.hibernate.SessionFactory的经典Hibernate方法和JPA javax.persistence.EntityManager实现之间有什么区别?我听说,这个JPA实现使用org.hibernate.SessionFactory并且像 Package 器一样工作,它是真实的的吗?

9jyewag0

9jyewag01#

确实如此。
JPA只是一个API,允许您从所使用的持久层中进行抽象。Hibernate提供了EntityManager接口的实现,该实现充当adapter-它使用与Hibernate SessionManager相同的底层方法。
例如,您可以将实现切换到EclipseLink,而不必更改任何源代码。

ie3xauqp

ie3xauqp2#

JPA只是一个规范,意味着没有实现。您可以使用JPA注解对类进行任意多的注解,但是如果没有实现,则什么都不会发生。可以将JPA视为必须遵循的准则或接口,而Hibernate的JPA实现是符合JPA规范定义的API的代码,并提供了底层功能。
将Hibernate与JPA一起使用时,实际上使用的是Hibernate JPA实现。这样做的好处是,可以将Hibernate的JPA实现替换为JPA规范的另一个实现。直接使用Hibernate时,您将锁定在实现中,因为其他ORM可能使用不同的方法/配置和注解,因此您无法切换到另一个ORM。

rkue9o1l

rkue9o1l3#

这是你问题的答案
经典的Hibernate方法与使用
会话工厂和实体管理器
执行情况?

org.hibernate.SessionFactory

如果你把下层ORM改为IBatis(例如),你也需要修改代码。

javax.persistence.EntityManager

如果你把下层ORM改为IBatis(例如),你不需要改变代码。

dxpyg8gm

dxpyg8gm4#

关于你的第一个问题,
JPA是一个Java API规范,它描述了使用Java平台管理应用程序中的关系数据。其中Hibernate是一个遵循JPA规范的ORM(对象关系Map)库。
您可以将JPA视为一组由Hibernate实现的规则。
回答您第二个问题,
由于JPA只是一个抽象的持久层,因此它需要实现。而Hibernate实现了使用Hibernate SessionManager的EntityManager接口。
这样,你就完全脱离了实现方式,意味着你可以随时切换到Hibernate或OenJPA中的任何一个或任何其他你想要的,不需要额外的代码修改。

bbmckpt7

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接口|

相关问题