JPA和Spring Data JPA有什么区别?

2022-08-31 06:53:25

我对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”导演有什么不同?


答案 1

我看到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" />

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

现在,春天到底是什么,JPA。Spring,JPA是否在JPA上添加了更多的功能(接口),并且仍然仅指定它还是它也是JPA提供程序?

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


答案 2

Java Persistence API,有时称为JPA,是一个Java框架,使用Java Platform,Standard Edition(JavaSE)和Java Platform,Enterprise Edition(JavaEE)管理应用程序中的关系数据。

此上下文中的持久性包括三个方面:

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

  • Java Persistence Query Language (JPQL)。

  • 对象关系元数据。

    enter image description here

Spring Data JPA是Spring Data项目的一部分,该项目使实现基于JPA的存储库变得更加容易。

特征:

  • 基于 Spring 和 JPA 构建存储库的复杂支持
  • 支持 QueryDSL 谓词,因此支持类型安全的 JPA 查询
  • 域类的透明审核
  • 分页支持,动态查询执行,集成自定义数据访问代码的能力
  • 在引导时验证带注释的查询@Query
  • 支持基于 XML 的实体映射
  • 基于 JavaConfig 的存储库配置,通过引入@EnableJpaRepositories

    enter image description here

推荐