From 352376166ac61b7ab439340bd99fb23bbeb0bd8d Mon Sep 17 00:00:00 2001 From: rolag-it Date: Mon, 29 Nov 2021 15:00:05 +0100 Subject: [PATCH] Fix pagination with reactive fluent Querydsl query definition. Pageable object was not passed to Query, so fetchPage retrieved erroneously the whole dataset as Page content. Closes #3892 --- .../repository/support/ReactiveSpringDataMongodbQuery.java | 3 ++- .../support/ReactiveQuerydslMongoPredicateExecutorTests.java | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveSpringDataMongodbQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveSpringDataMongodbQuery.java index d00d8873e..4f9717c0a 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveSpringDataMongodbQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveSpringDataMongodbQuery.java @@ -96,7 +96,8 @@ class ReactiveSpringDataMongodbQuery extends SpringDataMongodbQuerySupport> fetchPage(Pageable pageable) { - Mono> content = createQuery().flatMapMany(it -> find.matching(it).all()).collectList(); + Mono> content = createQuery().map(it -> it.with(pageable)) + .flatMapMany(it -> find.matching(it).all()).collectList(); return content.flatMap(it -> ReactivePageableExecutionUtils.getPage(it, pageable, fetchCount())); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/ReactiveQuerydslMongoPredicateExecutorTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/ReactiveQuerydslMongoPredicateExecutorTests.java index fbd5a495a..aff5d87e3 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/ReactiveQuerydslMongoPredicateExecutorTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/ReactiveQuerydslMongoPredicateExecutorTests.java @@ -400,6 +400,7 @@ public class ReactiveQuerydslMongoPredicateExecutorTests { .as(StepVerifier::create) // .assertNext(it -> { + assertThat(it.getContent().size()).isEqualTo(1); assertThat(it.getTotalElements()).isEqualTo(2); assertThat(it.getContent()).contains(dave); }).verifyComplete(); @@ -409,6 +410,7 @@ public class ReactiveQuerydslMongoPredicateExecutorTests { .as(StepVerifier::create) // .assertNext(it -> { + assertThat(it.getContent().size()).isEqualTo(1); assertThat(it.getTotalElements()).isEqualTo(2); assertThat(it.getContent()).contains(oliver); }).verifyComplete();