迁移到 Boot 3 后,“该类型未定义方法 findById”

Ger*_*oza 10 spring spring-data-jpa spring-boot

我有以下 Spring Data JPA 存储库:

public interface FooRepository extends PagingAndSortingRepository<Foo, Long> {}
Run Code Online (Sandbox Code Playgroud)

迁移到 Spring Boot 3 后,我开始收到大多数标准存储库方法的错误消息(例如fooRepository.findById(id),,,)fooRepository.save(foo)fooRepository.findAll()

我在Spring Boot 3.0迁移指南中找不到与此相关的任何内容

Ger*_*oza 12

看来Spring Data 3.0现在已经将“排序”存储库与基础存储库分开了(即PagingAndSortingRepository其他接口不再扩展CrudRepository,因此,我们必须使我们的存储库扩展多个框架存储库接口,将它们组合为我们想。

ListCrudRepository造成这种情况的一个原因是 Spring Data JPA现在引入了一个接口来检索List结果,而不是像以前Iterable那样CrudRepository(在许多情况下处理起来很痛苦)。

因此,通过这种解除绑定,我们现在可以选择PagingAndSortingRepositoryCrudRepository之前的行为结合使用,或者将其与 一起使用ListCrudRepository

public interface FooRepository extends 
  PagingAndSortingRepository<Foo, Long>,
  CrudRepository<Foo, Long> {}
Run Code Online (Sandbox Code Playgroud)

所有这些都在Spring Data 公告帖子以及Spring Data 3.0 文档中进行了解释:

请注意,各种排序存储库不再像 Spring Data 3.0 之前的版本中那样扩展各自的 CRUD 存储库。因此,如果您想要同时使用这两个接口的功能,则需要扩展这两个接口。