我正在开发一个使用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这两个本身就是接口的接口?据我所知,接口是被实现而不是被扩展的...我错过了什么吗?