这个问题在这里已有答案:
我正在使用 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 回答
请注意,JpaRepository扩展了CrudRepository . 比较这两个接口的JavaDoc:
JpaRepository vs CrudRepository
简而言之
JpaRepository
具有支持例如Query By Example的其他JPA特定方法,批量删除,手动刷新对数据库的更改
查询方法返回
List
而不是Iterable
如果您使用的是JPA,则应使用JpaRepository .