我对Spring数据JPA和JPA之间的区别感到有点困惑.我了解JPA,它是一种使用流行的ORM技术将Java对象持久化到关系数据库的规范.

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

那么,Spring data JPA到底是什么呢?

Spring Data JPA是在JPA之上添加了更多功能(接口),还是只指定了它,还是它也是JPAProvider ?

我看到Spring Data JPA围绕存储库工作(DAO层:如果我没有错的话).所以,我的意思是,使用"Spring Data JPA+Hibernate"或只使用"Hibernate"有什么不同?

推荐答案

我看到了Spring,JPA可以绕过存储库(DAO层:如果我没有弄错的话).所以我的意思是,使用"Spring JPA+Hibernate"和直接使用"Hibernate"有什么不同?

正如您所说,JPAspecification,而Hibernate是该规范的特定实现(这些实现通常被称为Providers).通过使用Hibernate,您可以将自己绑定到该Provider ,从而限制了您在需要时切换到另一个选项的自由(例如,您希望使用EclipseLink或ObjectDB,因为Hibernate有一个错误,会中断您的开发过程).

引用100's份文件:

很长一段时间以来,实现应用程序的数据访问层一直很麻烦.必须编写太多的样板代码.领域类很贫乏,没有以真正的面向对象或领域驱动的方式进行设计.

使用这两种技术可以让开发人员在富域模型的持久性方面更加轻松.尽管如此,实现存储库的样板代码量仍然相当高,尤其是.因此,Spring数据的存储库抽象的目标是显著减少为各种持久性存储实现数据访问层的工作量.

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

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

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

那么春天到底是什么,JPA.是Spring,JPA在JPA上增加了更多的功能(接口),还是只指定了它,还是它也是JPAProvider ?

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

Java相关问答推荐

在applitcation.properties中找到的字符串中输入变量

如何专门保存数据而不显示在jTable中?

日食IDE 2024-03在Ubuntu下崩溃,导致hr_err_pid.log

找到允许的最大底片

在Java中将Charsequence数组更改为String数组或List String<>

参数值[...]与预期类型java.util.Date不匹配

为什么我要创建一个单独的互斥体/锁对象?

将关键字与正文中的_Allowed匹配,但带有__Signing可选后缀

如何在ApachePOI中将图像添加到工作表的页眉?

在Spring Boot应用程序中导致";MediaTypeNotSupportdException&qot;的映像上载

SonarLint:只能有条件地调用方法(S)

每次FXMLLoader调用ApplationConext.getBean(类)时创建@Component的新实例

如何在JavaFX中处理多个按钮

无法将GSON导入到我的JavaFX Maven项目

除0错误/抱歉我的句子是PT

泛型与泛型问题的完美解决方案?

如何在Java中的重写方法参数中强制(Enum)接口实现?

使用@ExceptionHandler的GlobalExceptionHandler还是来自服务器的REST应答的ResponseEntity?

由于版本不匹配,从Java 8迁移到Java 17和Spring 6 JUnit4失败

读取ConcurrentHashMap中的可变对象