使用Spring Data JPA在JpaRepository和CrudRepository之间究竟有什么区别?

时间:2016-11-02 14:41:13

标签: spring spring-data spring-data-jpa

我正在开发一个 Spring Boot 应用程序,该应用程序使用 Spring Data JPA (在Hibernate 4上)来访问我的数据库。

我怀疑与 DAO 接口有关(JPA用于自动生成查询)。

所以,在我的项目中,我有这两个接口:

1) AccomodationDAO

@Repository
@Transactional(propagation = Propagation.MANDATORY)
public interface AccomodationDAO extends JpaRepository<Accomodation, Long> {

    Accomodation findById(@Param("id") Long id);

}

2) EventDAO

public interface EventDAO extends CrudRepository<Event, Integer> {

    public Event findByLocation(Point location);

    public Event findById(@Param("id") Integer id);

}

它们都工作正常并使用相同的逻辑来声明查询。

我唯一的疑问是:第一个扩展 JpaRepository ,而第二个实现 CrudRepository

JpaRepository CrudRepository 之间究竟有什么区别?什么是最好的选择使用或在什么情况下更好地使用一个而不是另一个选择?

另一个疑问是:为什么我定义的DAO接口扩展了 JpaRepository CrudRepository 这些接口本身?据我所知,接口已实现而非扩展...我缺少什么?

1 个答案:

答案 0 :(得分:8)

请注意,JpaRepository扩展了CrudRepository。比较这两个接口的JavaDoc:

JpaRepository vs CrudRepository

简而言之JpaRepository

  • 具有其他JPA特定方法,支持例如Query By Example,批量删除,手动刷新对数据库的更改
  • 查询方法返回List而不是Iterable

如果您使用的是JPA,则应使用JpaRepository。