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

原文由 Dhruv 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 572
2 个回答

我看到了 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 规范、使用您定义的提供程序来实现底层支持的存储库。

原文由 Fritz 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

在此处输入图像描述

原文由 Shreyos Adikari 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题