This question already has answers here:
What is difference between CrudRepository and JpaRepository interfaces in Spring Data JPA?

(6个答案)


4年前关闭。




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

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

因此,在我的项目中,我有以下两个接口(interface):

1)住宿DAO :
@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接口(interface)扩展了本身就是接口(interface)的 JpaRepository CrudRepository ?据我所知,接口(interface)是已实现但未扩展的……我缺少什么?

最佳答案

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

JpaRepository CrudRepository

简而言之JpaRepository

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

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

    10-06 13:05