Browse Source

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
pull/3960/head
rolag-it 4 years ago committed by Mark Paluch
parent
commit
352376166a
No known key found for this signature in database
GPG Key ID: 4406B84C1661DCD1
  1. 3
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveSpringDataMongodbQuery.java
  2. 2
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/ReactiveQuerydslMongoPredicateExecutorTests.java

3
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveSpringDataMongodbQuery.java

@ -96,7 +96,8 @@ class ReactiveSpringDataMongodbQuery<K> extends SpringDataMongodbQuerySupport<Re @@ -96,7 +96,8 @@ class ReactiveSpringDataMongodbQuery<K> extends SpringDataMongodbQuerySupport<Re
*/
Mono<Page<K>> fetchPage(Pageable pageable) {
Mono<List<K>> content = createQuery().flatMapMany(it -> find.matching(it).all()).collectList();
Mono<List<K>> content = createQuery().map(it -> it.with(pageable))
.flatMapMany(it -> find.matching(it).all()).collectList();
return content.flatMap(it -> ReactivePageableExecutionUtils.getPage(it, pageable, fetchCount()));
}

2
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/ReactiveQuerydslMongoPredicateExecutorTests.java

@ -400,6 +400,7 @@ public class ReactiveQuerydslMongoPredicateExecutorTests { @@ -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 { @@ -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();

Loading…
Cancel
Save