我对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'指导它有什么不同?
3 回答
如您所述, JPA 是规范,而 Hibernate 是该规范的特定实现(这些实现通常称为提供者) . 通过使用Hibernate,您可以将自己绑定到该提供程序,从而限制您在需要时切换到另一个选项的自由(例如,您希望使用EclipseLink或ObjectDB,因为Hibernate有一个停止开发过程的错误) .
引用 Spring Data JPA's 文件:
总而言之,它是在JPA之上添加另一层抽象,类似于定义基于标准的设计以支持Spring上下文中的持久层 . 这些定义的接口(Spring知道)提供框架使用JPA处理结果的服务 . 您可以通过Spring扫描项目并找到它来定义存储库:
因此,允许您在容器的上下文中或在容器的外部使用它 .
Spring Data JPA提供了一个定义,通过引用JPA规范,使用您定义的提供程序来实现支持的存储库 .
Persistence in this context covers three areas:
API本身,在
javax.persistence
包中定义 .Java持久性查询语言(JPQL) .
对象关系元数据 .
Features:
基于Spring和JPA构建存储库的复杂支持
支持QueryDSL谓词,从而支持类型安全的JPA查询
透明审核域类
分页支持,动态查询执行,集成自定义数据访问代码的能力
在引导时验证
@Query
带注释的查询支持基于XML的实体映射
通过引入
@EnableJpaRepositories
Spring Data JPA提供了黑盒子 - org.springframework.data.repository类 . 并非所有方法都暴露在这里 . 当你需要做一些复杂的事情时,这是一个限制 . 典型的JPA是开放的 - 你可以决定如何使用Entity Manager,例如在你的Dao中创建一些神奇的例程 .
您可以将Daobab(http://www.daobab.io)放在这两种技术上 . Daobab提供Java和JPA之间的集成,例如:
它适用于SprinDataJPA和纯JPA(Hibernate) . 这就是框架差异对你来说不重要的原因 .