diff --git a/src/main/java/org/springframework/data/elasticsearch/core/SearchHitSupport.java b/src/main/java/org/springframework/data/elasticsearch/core/SearchHitSupport.java index 3a7255aa1..9d99ff014 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/SearchHitSupport.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/SearchHitSupport.java @@ -65,8 +65,8 @@ public final class SearchHitSupport { if (result instanceof AggregatedPage) { AggregatedPage page = (AggregatedPage) result; List list = page.getContent().stream().map(SearchHitSupport::unwrapSearchHits).collect(Collectors.toList()); - return new AggregatedPageImpl<>(list, null, page.getTotalElements(), page.getAggregations(), page.getScrollId(), - page.getMaxScore()); + return new AggregatedPageImpl<>(list, page.getPageable(), page.getTotalElements(), page.getAggregations(), + page.getScrollId(), page.getMaxScore()); } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/aggregation/impl/AggregatedPageImpl.java b/src/main/java/org/springframework/data/elasticsearch/core/aggregation/impl/AggregatedPageImpl.java index 88fd756d4..a7be288be 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/aggregation/impl/AggregatedPageImpl.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/aggregation/impl/AggregatedPageImpl.java @@ -40,7 +40,7 @@ public class AggregatedPageImpl extends PageImpl implements AggregatedPage @Nullable private String scrollId; private float maxScore; - private static Pageable pageableOrUnpaged(Pageable pageable) { + private static Pageable pageableOrUnpaged(@Nullable Pageable pageable) { return ofNullable(pageable).orElse(Pageable.unpaged()); } @@ -82,24 +82,25 @@ public class AggregatedPageImpl extends PageImpl implements AggregatedPage this.maxScore = maxScore; } - public AggregatedPageImpl(List content, Pageable pageable, long total, Aggregations aggregations) { + public AggregatedPageImpl(List content, Pageable pageable, long total, @Nullable Aggregations aggregations) { super(content, pageableOrUnpaged(pageable), total); this.aggregations = aggregations; } - public AggregatedPageImpl(List content, Pageable pageable, long total, Aggregations aggregations, float maxScore) { + public AggregatedPageImpl(List content, Pageable pageable, long total, @Nullable Aggregations aggregations, + float maxScore) { this(content, pageableOrUnpaged(pageable), total, aggregations); this.maxScore = maxScore; } - public AggregatedPageImpl(List content, Pageable pageable, long total, Aggregations aggregations, + public AggregatedPageImpl(List content, Pageable pageable, long total, @Nullable Aggregations aggregations, String scrollId) { this(content, pageableOrUnpaged(pageable), total, aggregations); this.scrollId = scrollId; } - public AggregatedPageImpl(List content, Pageable pageable, long total, Aggregations aggregations, String scrollId, - float maxScore) { + public AggregatedPageImpl(List content, Pageable pageable, long total, @Nullable Aggregations aggregations, + String scrollId, float maxScore) { this(content, pageableOrUnpaged(pageable), total, aggregations, scrollId); this.maxScore = maxScore; } diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryBaseTests.java b/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryBaseTests.java index 9bb1d2050..f815d0bf0 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryBaseTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryBaseTests.java @@ -545,6 +545,37 @@ public abstract class CustomMethodRepositoryBaseTests { assertThat(page.getTotalElements()).isEqualTo(1L); } + @Test // DATAES-777 + public void shouldReturnPageableInUnwrappedPageResult() { + + // given + String documentId = randomNumeric(5); + SampleEntity sampleEntity = new SampleEntity(); + sampleEntity.setId(documentId); + sampleEntity.setType("test"); + sampleEntity.setMessage("foo"); + sampleEntity.setAvailable(true); + repository.save(sampleEntity); + + // given + String documentId2 = randomNumeric(5); + SampleEntity sampleEntity2 = new SampleEntity(); + sampleEntity2.setId(documentId2); + sampleEntity2.setType("test"); + sampleEntity2.setMessage("bar"); + sampleEntity2.setAvailable(false); + repository.save(sampleEntity2); + + // when + PageRequest pageable = PageRequest.of(0, 10); + Page page = repository.findByAvailable(false, pageable); + + // then + assertThat(page).isNotNull(); + assertThat(page.getTotalElements()).isEqualTo(1L); + assertThat(page.getPageable()).isSameAs(pageable); + } + @Test public void shouldReturnPageableResultsWithQueryAnnotationExpectedPageSize() {