我对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'指导它是如何不同的?
答案 0 :(得分:116)
我看到Spring,JPA围绕存储库工作(DAO层:如果我没有错)。所以我的意思是使用'Spring JPA + Hibernate'或仅直接使用'Hibernate'会有什么不同?
正如您所说, JPA 是规范,而 Hibernate 是该规范的特定实现(这些实现通常称为< EM>提供商)。通过使用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规范,使用您定义的提供程序来实现支持的存储库。
答案 1 :(得分:33)
Java Persistence API,有时也称为JPA,是一个Java框架,用于管理使用Java平台,标准版(JavaSE)和Java平台企业版(JavaEE)的应用程序中的关系数据。
在此背景下的持久性包括三个方面:
Spring Data JPA是Spring Data项目的一部分,可以更轻松地实现基于JPA的存储库。
功能强>
答案 2 :(得分:8)
JPA是规范Java Objects映射到关系数据库系统的方式的规范。 JPA只是一个规范,它由EntityManagerFactory
,EntityManager
之类的一组接口以及可帮助您将Java实体对象映射到数据库表的注释组成。
您可以使用几种JPA提供程序,例如HIbernate,EclipseLink或Open JPA。
Spring Data JPA是JPA数据访问抽象。就像JPA一样,没有JPA提供程序,Spring Data JPA也无法工作。
Spring Data JPA提供了针对DDD Repository
pattern或DAO (Data Acess Object) pattern
的解决方案。它还可以通过方法名称约定代表您生成JPA查询。
Spring Data JPA可以与Hibernate,Eclipse Link或任何其他JPA提供程序一起使用。使用Spring或Java EE的一个非常有趣的好处是you can control transaction boundaries declaratively using the @Transactional
annotation。