JPA和Spring Data JPA有什么区别?


144

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

Answers:


126

我看到了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规范,提供了实现内部支持的存储库的定义。


1
我可以称存储库为Spring管理的实体的集合吗?我不知道为什么,但是使用存储库的Spring JPA支持似乎与EJB的EntityManager非常相似-是正确的想法还是目的完全不同?提前致谢。穆斯塔法。
Mustafa 2014年

1
@Mustafa大多数解决方案都有共同点。艰难的目标可能是相同的,但由于涉及接口,实现也有所不同。
Fritz 2014年

35

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

    在此处输入图片说明

3

JPA

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

您可以使用几种JPA提供程序,例如HIbernate,EclipseLink或Open JPA。

Spring Data JPA

Spring Data JPA是JPA数据访问抽象。就像JPA一样,没有JPA提供程序,Spring Data JPA也无法工作。

Spring Data JPA提供了DDD Repository模式或的 解决方案DAO (Data Acess Object) pattern。它还可以通过方法名称约定代表您生成JPA查询。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.