首页 > 解决方案 > Spring Data Mongodb Reactive 存储库中 findAll 方法的分页

问题描述

已经有一个关于分页的问题ReactiveCrudRepository。接受的解决方案适用于遵循某种findBy格式的查询。项目文档还引用了该用法:

https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo.reactive.repositories.usage

示例 158.持久化 Person 实体的基本存储库接口

public interface ReactivePersonRepository extends
ReactiveSortingRepository<Person, String> {

  Flux<Person> findByFirstname(String firstname);                     


  Flux<Person> findByFirstname(Publisher<String> firstname);          


  Flux<Person> findByFirstnameOrderByLastname(String firstname,
Pageable pageable); 

  Mono<Person> findByFirstnameAndLastname(String firstname, String
lastname);       

  Mono<Person> findFirstByLastname(String lastname);                  
}

问题是这不适用于 findAll:

interface CustomerRepository : ReactiveCrudRepository<Customer, String> {
    fun findAll(pageable: Pageable): Flux<Customer>

例外:

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type Customer!

Spring Data MongoDB 是否以某种方式支持这一点?

标签: springmongodbspring-dataspring-data-mongodb

解决方案


首先findAll(Pageable pageable)是一种方法PagingAndSortingRepository。Spring 数据支持使用findByfindAll(Pageable pageable).

目前 Reactive Spring Data MongoDB 不支持任何类似findAll(pageable: Pageable)的方法,但有一种方法可以做到。

interface CustomerRepository : ReactiveSortingRepository<Customer, String> {
    fun findByIdNotNull(pageable: Pageable): Flux<Customer>
}   

您可以从此处阅读更多详细信息


推荐阅读