Пагинация для метода findAll в репозиториях Spring Data Mongodb Reactive - PullRequest
1 голос
/ 15 апреля 2020

Уже есть вопрос о нумерации страниц с ReactiveCrudRepository. Принятое решение работает для запросов в формате findBy. В проектной документации также упоминается, что использование:

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

Пример 158. Базовый c интерфейс хранилища для сохранения персоны entity

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 это каким-то образом?

1 Ответ

1 голос
/ 15 апреля 2020

Прежде всего findAll(Pageable pageable) - это метод PagingAndSortingRepository. Запрос метода поддержки данных Spring с использованием findBy, который не связан с findAll(Pageable pageable).

В настоящее время реактивные данные Spring MongoDB не поддерживает ни один метод, например findAll(pageable: Pageable), но есть способ сделать это.

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

Подробнее о можно прочитать здесь

...