ChatGPT解决这个技术问题 Extra ChatGPT

JPA 和 Spring Data JPA 有什么区别?

我对 Spring Data-JPA 和 JPA 之间的区别有点困惑。我知道 JPA,它是一种使用流行的 ORM 技术将 Java 对象持久保存到关系数据库的规范。

换句话说,JPA 提供接口和其他 ORM 技术,实现那些称为 JPA 提供者的接口,例如 Hibernate。

现在,Spring Data JPA 到底是什么?

Spring Data JPA 是否在 JPA 上添加了更多功能(接口),但它仍然是仅指定的,还是它也是 JPA 提供者?

我看到 Spring Data JPA 围绕存储库工作(DAO 层:如果我没记错的话)。所以,我的意思是,使用“Spring Data JPA + Hibernate”或仅使用“Hibernate”指导有何不同?


C
Community

我看到 Spring,JPA 围绕存储库工作(DAO 层:如果我没记错的话)。所以我的意思是使用“Spring JPA + Hibernate”或仅直接使用“Hibernate”有什么不同?

正如您所说,JPA 是一种规范,而 Hibernate 是该规范的特定实现(这些实现通常称为提供程序)。通过使用 Hibernate,您将自己与该提供者绑定在一起,从而限制了您在需要时切换到另一个选项的自由(例如,您想使用 EclipseLink 或 ObjectDB,因为 Hibernate 有一个错误会停止您的开发过程)。

引用 Spring Data JPA 文档:

实施应用程序的数据访问层已经很麻烦了。必须编写太多样板代码。领域类是贫乏的,并且没有以真正的面向对象或领域驱动的方式设计。使用这两种技术可以让开发人员在富域模型的持久性方面变得更加轻松。尽管如此,实现存储库的样板代码量仍然很高。因此 Spring Data 的存储库抽象的目标是显着减少为各种持久存储实现数据访问层的工作量。

总而言之,它在 JPA 之上添加了另一层抽象,类似于定义基于标准的设计以支持 Spring 上下文中的持久层。那些定义的接口(Spring 已知)提供框架使用 JPA 处理的服务以提供结果。您以 Spring 可以扫描项目并找到它的方式定义存储库:

<repositories base-package="com.acme.repositories" />

因此,允许您在容器的上下文中或容器外部使用它。

现在究竟什么是 Spring,JPA。 Spring,JPA 是否在 JPA 上添加了更多功能(接口),但它仍然是仅指定的,还是它也是 JPA 提供者?

Spring Data JPA 提供了一个定义,通过引用 JPA 规范,使用您定义的提供者来实现底层支持的存储库。


我可以将存储库称为 Spring 管理的实体集合吗?我不知道为什么,但是使用存储库的 Spring JPA 支持似乎与 EJB 的 EntityManager 非常相似——这是正确的想法还是它们的目的完全不同?提前致谢。穆斯塔法。
@Mustafa 大多数解决方案都有共同点。尽管目标可能相同,但由于涉及的接口,实现方式不同。
我对“它在 JPA 之上”感到困惑,如果 JPA 是 Hibernate 实现的规范,那么这是否意味着 Spring Data JPA 是 JPA 的超集。就像 TypeScript 是 JavaScript 的超集一样?
S
Shreyos Adikari

Java Persistence API,有时也称为 JPA,是一个 Java 框架,用于管理使用 Java 平台标准版 (JavaSE) 和 Java 平台企业版 (JavaEE) 的应用程序中的关系数据。

在这方面的持久性包括三个方面:

API 本身,在 javax.persistence 包中定义。

Java 持久性查询语言 (JPQL)。

对象关系元数据。

Spring Data JPA 是 Spring Data 伞形项目的一部分,它可以更轻松地实现基于 JPA 的存储库。

特征:

支持基于 Spring 和 JPA 构建存储库

支持 QueryDSL 谓词,因此支持类型安全的 JPA 查询

域类的透明审计

分页支持、动态查询执行、集成自定义数据访问代码的能力

在引导时验证 @Query 注释查询

支持基于 XML 的实体映射

通过引入@EnableJpaRepositories 进行基于JavaConfig 的存储库配置


V
Vlad Mihalcea

JPA

JPA 是标准化 Java 对象映射到关系数据库系统的方式的规范。作为一个规范,JPA 由一组接口(如 EntityManagerFactoryEntityManager)和帮助您将 Java 实体对象映射到数据库表的注释组成。

您可以使用多个 JPA 提供程序,例如 HIbernate、EclipseLink 或 Open JPA。

春季数据 JPA

Spring Data JPA 是一个 JPA 数据访问抽象。就像 JPA 一样,Spring Data JPA 不能在没有 JPA 提供者的情况下工作。

Spring Data JPA 为 DDD Repository patternDAO (Data Acess Object) pattern 提供了解决方案。它还可以通过方法名称约定代表您生成 JPA 查询。

Spring Data JPA 可以与 Hibernate、Eclipse Link 或任何其他 JPA 提供程序一起使用。使用 Spring 或 Java EE 的一个非常有趣的好处是您可以使用 @Transactional 注释以声明方式控制事务边界。


5
541-Rohit kumar

jpa是java的一个规范。它用于在java obect和关系数据库之间持久化数据。 Spring data jpa-它与jpa相同,意味着我们可以用以下方式描述。 Spring Data Jpa 是 jpa 数据抽象访问,这意味着它类似于 jpa,但它添加了一些额外的功能,没有 jpa 我们无法实现 spring data jpa。


如果在此解释后有任何疑问,请发布问题。