169

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

4

4 回答 4

136

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

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

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

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

于 2013-04-22T13:36:41.580 回答
44

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 的实体映射
  • 通过引入基于 JavaConfig 的存储库配置@EnableJpaRepositories

    在此处输入图像描述
于 2013-04-22T13:34:33.230 回答
28

JPA

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

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

春季数据 JPA

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

Spring Data JPA 为DDDRepository模式DAO (Data Acess Object) pattern. 它还可以通过方法名称约定代表您生成 JPA 查询。

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

于 2020-05-11T18:27:23.533 回答
1

营销。Spring 生命周期遵循这样一种模式:Java item X 是邪恶的,然后意识到它是必要的,然后重新命名并声称发明了它。

于 2021-09-23T18:28:22.257 回答