diff --git a/pom.xml b/pom.xml index 01115a9d8c..ebc3efaaf6 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-relational-parent - 4.0.0-SNAPSHOT + 4.0.0-2138-remove-Page-results-SNAPSHOT pom Spring Data Relational Parent diff --git a/spring-data-jdbc-distribution/pom.xml b/spring-data-jdbc-distribution/pom.xml index b3c39e64c3..98e4b8c150 100644 --- a/spring-data-jdbc-distribution/pom.xml +++ b/spring-data-jdbc-distribution/pom.xml @@ -14,7 +14,7 @@ org.springframework.data spring-data-relational-parent - 4.0.0-SNAPSHOT + 4.0.0-2138-remove-Page-results-SNAPSHOT ../pom.xml diff --git a/spring-data-jdbc/pom.xml b/spring-data-jdbc/pom.xml index 9fc8266b9e..95184d944e 100644 --- a/spring-data-jdbc/pom.xml +++ b/spring-data-jdbc/pom.xml @@ -6,7 +6,7 @@ 4.0.0 spring-data-jdbc - 4.0.0-SNAPSHOT + 4.0.0-2138-remove-Page-results-SNAPSHOT Spring Data JDBC Spring Data module for JDBC repositories. @@ -15,7 +15,7 @@ org.springframework.data spring-data-relational-parent - 4.0.0-SNAPSHOT + 4.0.0-2138-remove-Page-results-SNAPSHOT diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateOperations.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateOperations.java index 52113f867e..c30429694f 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateOperations.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateOperations.java @@ -230,7 +230,9 @@ public interface JdbcAggregateOperations { * @param pageable the pagination information. Must not be {@code null}. * @return Guaranteed to be not {@code null}. * @since 2.0 + * @deprecated use a combination of other methods of this class to construct results of type {@link Page}. */ + @Deprecated(since = "4.0") Page findAll(Class domainType, Pageable pageable); /** @@ -275,7 +277,9 @@ public interface JdbcAggregateOperations { * @param pageable can be null. * @return a {@link Page} of entities matching the given {@link Example}. * @since 3.0 + * @deprecated use a combination of other methods of this class to construct results of type {@link Page}. */ + @Deprecated(since = "4.0") Page findAll(Query query, Class domainType, Pageable pageable); /** diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateTemplate.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateTemplate.java index a744208cfa..ad078f1ebc 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateTemplate.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateTemplate.java @@ -359,6 +359,7 @@ public Stream streamAll(Class domainType, Sort sort) { return allStreamable.map(this::triggerAfterConvert); } + @Deprecated @Override public Page findAll(Class domainType, Pageable pageable) { @@ -388,6 +389,7 @@ public Stream streamAll(Query query, Class domainType) { return accessStrategy.streamAll(query, domainType).map(this::triggerAfterConvert); } + @Deprecated @Override public Page findAll(Query query, Class domainType, Pageable pageable) { diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/FetchableFluentQueryByExample.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/FetchableFluentQueryByExample.java index 7b12af8193..f56bc38fd2 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/FetchableFluentQueryByExample.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/FetchableFluentQueryByExample.java @@ -35,6 +35,7 @@ import org.springframework.data.projection.ProjectionFactory; import org.springframework.data.relational.core.query.Query; import org.springframework.data.relational.repository.query.RelationalExampleMapper; +import org.springframework.data.support.PageableExecutionUtils; import org.springframework.util.Assert; /** @@ -126,8 +127,15 @@ public Window scroll(ScrollPosition scrollPosition) { @Override public Page page(Pageable pageable) { - return this.entityOperations.findAll(createQuery(p -> p.with(pageable)), getExampleType(), pageable) - .map(item -> this.getConversionFunction().apply(item)); + Query contentQuery = createQuery(p -> p.with(pageable)); + List content = this.entityOperations.findAll(contentQuery, getExampleType()); + + List result = new ArrayList<>(content.size()); + for (S s : content) { + result.add(getConversionFunction().apply(s)); + } + + return PageableExecutionUtils.getPage(result, pageable, () -> this.entityOperations.count(createQuery(), getExampleType())); } @Override diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/SimpleJdbcRepository.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/SimpleJdbcRepository.java index 585755541d..a76e2621f8 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/SimpleJdbcRepository.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/SimpleJdbcRepository.java @@ -27,11 +27,14 @@ import org.springframework.data.jdbc.core.convert.JdbcConverter; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.projection.SpelAwareProxyProjectionFactory; +import org.springframework.data.relational.core.query.CriteriaDefinition; +import org.springframework.data.relational.core.query.Query; import org.springframework.data.relational.repository.query.RelationalExampleMapper; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.query.FluentQuery; import org.springframework.data.repository.query.QueryByExampleExecutor; +import org.springframework.data.support.PageableExecutionUtils; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; @@ -139,7 +142,16 @@ public List findAll(Sort sort) { @Override public Page findAll(Pageable pageable) { - return entityOperations.findAll(entity.getType(), pageable); + + Assert.notNull(pageable, "Pageable must not be null"); + + Query query1 = Query.query(CriteriaDefinition.empty()); + + + Query query = query1.with(pageable); + List content = entityOperations.findAll(query, entity.getType()); + + return PageableExecutionUtils.getPage(content, pageable, () -> entityOperations.count(entity.getType())); } @Override @@ -172,9 +184,17 @@ public List findAll(Example example, Sort sort) { public Page findAll(Example example, Pageable pageable) { Assert.notNull(example, "Example must not be null"); + Assert.notNull(pageable, "Pageable must not be null"); - return this.entityOperations.findAll(this.exampleMapper.getMappedExample(example), example.getProbeType(), - pageable); + Query mappedQuery = this.exampleMapper.getMappedExample(example); + + + Query contentQuery = mappedQuery.with(pageable); + + List content = this.entityOperations.findAll(contentQuery, example.getProbeType()); + + return PageableExecutionUtils.getPage(content, pageable, + () -> this.entityOperations.count(mappedQuery, example.getProbeType())); } @Override @@ -203,4 +223,5 @@ public R findBy(Example example, Function JdbcAggregateOperations.findAll(sort: Sort): List JdbcAggregateOperations.findAll(pageable: Pageable): Page = findAll(T::class.java, pageable) diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java index c5b82f0be1..7dd18feb83 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java @@ -119,6 +119,7 @@ public class JdbcRepositoryIntegrationTests { public static Stream findAllByExamplePageableSource() { + // Pageable pageRequest, int size, int totalPages, List notContains return Stream.of( // Arguments.of(PageRequest.of(0, 3), 3, 34, Arrays.asList("3", "4", "100")), // Arguments.of(PageRequest.of(1, 10), 10, 10, Arrays.asList("9", "20", "30")), // @@ -126,7 +127,8 @@ public static Stream findAllByExamplePageableSource() { Arguments.of(PageRequest.of(33, 3), 1, 34, Collections.emptyList()), // Arguments.of(PageRequest.of(36, 3), 0, 34, Collections.emptyList()), // Arguments.of(PageRequest.of(0, 10000), 100, 1, Collections.emptyList()), // - Arguments.of(PageRequest.of(100, 10000), 0, 1, Collections.emptyList()) // + Arguments.of(PageRequest.of(100, 10000), 0, 1, Collections.emptyList()), // + Arguments.of(Pageable.unpaged(), 100, 1, Collections.emptyList()) // ); } diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/SimpleJdbcRepositoryEventsUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/SimpleJdbcRepositoryEventsUnitTests.java index 827d4559a8..5ab44d735b 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/SimpleJdbcRepositoryEventsUnitTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/SimpleJdbcRepositoryEventsUnitTests.java @@ -51,6 +51,7 @@ import org.springframework.data.relational.core.mapping.event.Identifier; import org.springframework.data.relational.core.mapping.event.RelationalEvent; import org.springframework.data.relational.core.mapping.event.WithId; +import org.springframework.data.relational.core.query.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.jdbc.core.JdbcOperations; @@ -264,7 +265,7 @@ void publishesEventsOnFindAllPaged() { DummyEntity entity1 = new DummyEntity(42L); DummyEntity entity2 = new DummyEntity(23L); - doReturn(asList(entity1, entity2)).when(dataAccessStrategy).findAll(any(), any(Pageable.class)); + doReturn(asList(entity1, entity2)).when(dataAccessStrategy).findAll(any(Query.class), any(Class.class)); doReturn(2L).when(dataAccessStrategy).count(any()); repository.findAll(PageRequest.of(0, 20)); diff --git a/spring-data-r2dbc/pom.xml b/spring-data-r2dbc/pom.xml index 7cb5f7a108..3441c25582 100644 --- a/spring-data-r2dbc/pom.xml +++ b/spring-data-r2dbc/pom.xml @@ -6,7 +6,7 @@ 4.0.0 spring-data-r2dbc - 4.0.0-SNAPSHOT + 4.0.0-2138-remove-Page-results-SNAPSHOT Spring Data R2DBC Spring Data module for R2DBC @@ -15,7 +15,7 @@ org.springframework.data spring-data-relational-parent - 4.0.0-SNAPSHOT + 4.0.0-2138-remove-Page-results-SNAPSHOT diff --git a/spring-data-relational/pom.xml b/spring-data-relational/pom.xml index 6fc709727e..7ddb7b307e 100644 --- a/spring-data-relational/pom.xml +++ b/spring-data-relational/pom.xml @@ -6,7 +6,7 @@ 4.0.0 spring-data-relational - 4.0.0-SNAPSHOT + 4.0.0-2138-remove-Page-results-SNAPSHOT Spring Data Relational Spring Data Relational support @@ -14,7 +14,7 @@ org.springframework.data spring-data-relational-parent - 4.0.0-SNAPSHOT + 4.0.0-2138-remove-Page-results-SNAPSHOT