1. JPA与Spring Data JPA的关系
基于JPA的程序的数据库访问接口为EntityManager,其实现类由EntityManagerFactory产生(EntityManagerFactory的实现类有LocalEntityManagerFactoryBean和LocalContainerEntityManagerFactoryBean,后者在JavaWeb中常用),程序对持久层的操作通过EntityManager进行,而Spring Data JPA 提供的JpaRepository接口将JPA中的EntityManager进行了进一步的封装,并提供了相应的持久层实现类,使用时仅需要持久层接口继承JpaRepository接口,不再需要实现类,将原来对EntityManager的方法调用也省去了。
2. JPA与Hibernate的整合
Hibernate原生的数据库访问接口核心为org.hibernate.session,该接口继承自JPA中的EntityManager接口。
3. 为什么使用Spring Data JPA不再需要实现类
令自己的持久层接口继承于JpaRepository(或更父级的PagingAndSortingRepository、CrudRepository),这些注解本身继承于Repository接口,Spring Data在扫描Repository注解时,便会创建接口的实现类,在其中包含JpaRepository、PagingAndSortingRepository、CrudRepository、Repository等接口中定义的方法的具体实现。