JPA是一套标准与规范,是Java Persistence API的简称,定义了一种对象、关系映射工具,用于管理应用中的关系数据。将开发者从JDBC和SQL的样板代码中解放出来。这套标准可以是Hibernate实现,也可以是OpenJpa, EclipseLink......所以可以理解为,JPA是一套标准,将各种ORM统一封装了起来,这些ORM的具体实现可以认为是JPA这种规范的JpaProvider。而Spring Data Jpa是对JPA的再次封装,底层还是使用了Hibernate实现的JPA标准,成为Spring Data家族的一员,在SpringBoot和SpringCloud中可以方便的调用。

  JPA和Hibernate的关系比较好理解,但是在使用多了Spring Data Jpa之后会有种感觉说,好像这些东西天然就是融合在一起的。其实想一想,JPA是规范,Hibernate是一种ORM实现,那么我们以前还经常会做所谓的SSH整合,整合不好的话还会出现很多bug,那么这个Spring Data Jpa就是把Hibernate实现的JPA和Spring整合好了,形成了一种事实上的绑定,我们在Spring中想要用Jpa的话,一般直接就引入Spring Data Jpa就完事,很便捷了。

  另外,在Spring Data Jpa中,还规定了一些特殊的接口,便于我们在实现中使用。而这些接口与实现,本身和JPA是没有什么关系的,它们只是Spring Data Jpa系列中的一种规范和理念。所以,有一个比较重要的工作就是要区分出来,哪一部分是Hibernate的主要内容,哪一部分是JPA定义的主要概念,而哪一部分又是Spring Data理念下的产物,这样在出现bug之后,我们搜索解决方案的方向就基本不会太偏,往往容易找到问题的本质。

---------------------------------------------------------------------------------------------------

Repository是最底层的抽象接口,最顶级的父类。查看Hierarchy,看图:

Hibernate, Jpa, Spring Data Jpa的关系与区别_ssh整合

右键实现类SimpleJpaRepository,show diagram:

Hibernate, Jpa, Spring Data Jpa的关系与区别_hibernate_02

JapRepositoy所继承的如CRUD,PageAndSort,等等是Spring Data为了兼容NoSQL而进行的抽象封装。从JpaRepository开始,是对关系型数据库进行抽象封装。

---------------------------------------------------------------------------------------------------

【参考】《Spring Data Jpa入门到精通》