使用 Spring Data JPA 的 JpaRepository 和 CrudRepository 之间到底有啥区别? [复制]
Posted
技术标签:
【中文标题】使用 Spring Data JPA 的 JpaRepository 和 CrudRepository 之间到底有啥区别? [复制]【英文标题】:What exactly is the difference between JpaRepository and CrudRepository using Spring Data JPA? [duplicate]使用 Spring Data JPA 的 JpaRepository 和 CrudRepository 之间到底有什么区别? [复制] 【发布时间】:2017-03-15 22:19:47 【问题描述】:我正在开发一个 Spring Boot 应用程序,该应用程序使用 Spring Data JPA(在 Hibernate 4 上)访问我的数据库。
我的疑问与 DAO 接口(JPA 用于自动生成查询)有关。
所以,在我的项目中,我有这两个接口:
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 接口扩展了本身就是接口的 JpaRepository 和 CrudRepository?据我所知,接口已实现而不是扩展......我错过了什么?
【问题讨论】:
看这个***.com/questions/14014086/… 简而言之,它是一样的,但是扩展CrudRepository
,除非你需要特定于JPA的功能。
【参考方案1】:
请注意,JpaRepository 扩展了 CrudRepository。比较这两个接口的JavaDoc:
JpaRepository vs CrudRepository
简而言之JpaRepository
List
's 而不是Iterable
's
如果您使用 JPA,则应使用 JpaRepository。
【讨论】:
尤其是最后一部分是错误的。尽一切努力避免使用商店特定的接口,因为使用它们会将持久性技术泄漏到客户端中。仅当确实需要其中的调整功能时,才应使用商店特定的接口。详情见我的其他回答:***.com/a/20784007/18122 吸取的教训 - 谢谢你,奥利弗以上是关于使用 Spring Data JPA 的 JpaRepository 和 CrudRepository 之间到底有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot(17)——使用Spring Data JPA