Spring Data-JPA与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'指导它有什么不同?


#1 热门回答(104 赞)

我看到Spring,JPA围绕存储库工作(DAO层:如果我没有错)。所以我的意思是使用'Spring JPA Hibernate'或直接使用'Hibernate'是多么不同?

如你所述,JPAis anspecificationwhileHibernate是该规范的特定实现(这些实现通常称为提供者)。通过使用Hibernate,你可以将自己绑定到该提供程序,从而限制你在需要时切换到另一个选项的自由(例如,你希望使用EclipseLink或ObjectDB,因为Hibernate有一个停止开发过程的错误)。

QuotingSpring Data JPA'sdocumentation:

在相当长的一段时间内,实现应用程序的数据访问层一直很麻烦。必须编写太多的样板代码。域类是贫血的,并没有以真实的面向对象或域驱动的方式设计。使用这两种技术可以使开发人员在富域模型的持久性方面更加轻松。尽管如此,实现存储库的样板代码量仍然很高。因此,Spring Data的存储库抽象的目标是减少为各种持久性存储实现数据访问层的工作量。

总而言之,它是在JPA之上添加另一层抽象,类似于定义基于标准的设计以支持Spring上下文中的持久层。这些定义的接口(Spring知道)提供框架使用JPA处理结果的服务。你可以通过Spring扫描项目并找到它来定义存储库:

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

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

现在Spring究竟是什么,JPA。是Spring,JPA在JPA上增加了一些功能(接口),仍然只是指定它还是JPA提供者?

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


#2 热门回答(26 赞)

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

#3 热门回答(8 赞)

JPA是Java Persistence API,它是Java用于对象关系映射的标准API。

JPA只是一个规范 - 你需要实现它才能使用它。 Hibernate是JPA中最着名和最常用的实现之一,但还有其他一些,例如EclipseLink JPA。

Spring Framework是一个大型框架,可以帮助你更轻松地编写企业级软件。它包含对许多Java技术的支持,包括JPA。

Spring Framework由一组项目组成,其中一个项目是Spring Data。

Spring Data的目标是使其更容易使用不同类型的数据库,从传统的关系数据库到NoSQL数据库。 Spring Data通过Spring Data JPA子项目支持JPA。

要编写使用JPA的程序,至少需要一个JPA实现,例如Hibernate。

如果你正在为你的应用程序使用Spring Framework,那么你很可能希望将Spring Data JPA与Hibernate一起使用。

此链接应有助于更好地理解概念:
https://spring.io/blog/2011/02/10/getting-started-with-spring-data-jpa/