一尘不染

JPA和Spring Data JPA有什么区别?

hibernate

我对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”定向有何不同?


阅读 650

收藏
2020-06-20

共1个答案

一尘不染

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

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

引用 Spring Data JPA文档:

实现应用程序的数据访问层已经很长一段时间了。必须编写太多样板代码。域类是贫乏的,不是以真实的面向对象或域驱动的方式设计的。

结合使用这两种技术,就富域模型的持久性而言,使开发人员的工作变得更加轻松。尽管如此,实现存储库的样板代码数量仍然非常高。因此,Spring
Data存储库抽象的目标是显着减少为各种持久性存储实现数据访问层的工作量。

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

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

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

现在,JPA正是Spring。Spring,JPA是在JPA之上添加了更多功能(接口),仍然仅被指定还是JPA提供者吗?

Spring Data JPA通过使用定义的提供程序来引用JPA规范,从而提供了实现内部支持的存储库的定义。

2020-06-20