From a1e9391897eb16a44c8af8c3d5b8e23dc8010d51 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 23 Oct 2025 13:50:26 +0200 Subject: [PATCH] Polishing. Refine deprecation messages. Simplify conversion, use Stream methods directly. See #2138 Original pull request #2161 --- .../jdbc/core/JdbcAggregateOperations.java | 12 ++++-- .../data/jdbc/core/JdbcAggregateTemplate.java | 4 +- .../FetchableFluentQueryByExample.java | 39 ++++++++++--------- .../support/SimpleJdbcRepository.java | 11 +----- .../core/JdbcAggregateOperationsExtensions.kt | 5 ++- 5 files changed, 35 insertions(+), 36 deletions(-) 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 92b386016..e10ae708a 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 @@ -226,9 +226,11 @@ 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 3.5.6. Use {@link #findAll(Class, Sort)} together with {@link #count(Class)} to construct results + * of type {@link Page}.The API design is conflicts regarding pagination information. Also, pagination is + * primarily a feature of the repository and not the template API. */ - @Deprecated(since = "4.0") + @Deprecated(since = "3.5.6") Page findAll(Class domainType, Pageable pageable); /** @@ -273,9 +275,11 @@ 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 3.5.6. Use {@link #findAll(Query, Class)} together with {@link #count(Query, Class)} to construct + * results of type {@link Page}. The API design is conflicts regarding pagination information. Also, + * pagination is primarily a feature of the repository and not the template API. */ - @Deprecated(since = "4.0") + @Deprecated(since = "3.5.6") 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 8fa9c79c7..0746c7cd1 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 @@ -313,8 +313,8 @@ public class JdbcAggregateTemplate implements JdbcAggregateOperations { return allStreamable.map(this::triggerAfterConvert); } - @Deprecated @Override + @Deprecated(since = "3.5.6") public Page findAll(Class domainType, Pageable pageable) { Assert.notNull(domainType, "Domain type must not be null"); @@ -343,8 +343,8 @@ public class JdbcAggregateTemplate implements JdbcAggregateOperations { return accessStrategy.streamAll(query, domainType).map(this::triggerAfterConvert); } - @Deprecated @Override + @Deprecated(since = "3.5.6") public Page findAll(Query query, Class domainType, Pageable pageable) { Iterable items = triggerAfterConvert(accessStrategy.findAll(query, domainType, 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 c30e6165b..1426c8652 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 @@ -16,13 +16,11 @@ package org.springframework.data.jdbc.repository.support; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.function.Function; import java.util.function.UnaryOperator; import java.util.stream.Stream; -import java.util.stream.StreamSupport; import org.springframework.data.domain.Example; import org.springframework.data.domain.OffsetScrollPosition; @@ -93,16 +91,8 @@ class FetchableFluentQueryByExample extends FluentQuerySupport { private List findAll(Query query) { - Function conversionFunction = this.getConversionFunction(); - Iterable raw = this.entityOperations.findAll(query, getExampleType()); - - List result = new ArrayList<>(raw instanceof Collections ? ((Collection) raw).size() : 16); - - for (S s : raw) { - result.add(conversionFunction.apply(s)); - } - - return result; + List raw = this.entityOperations.findAll(query, getExampleType()); + return mapContent(raw); } @Override @@ -133,21 +123,33 @@ class FetchableFluentQueryByExample extends FluentQuerySupport { Query contentQuery = createQuery(p -> p.with(pageable)); List content = this.entityOperations.findAll(contentQuery, getExampleType()); + List result = mapContent(content); + + return PageableExecutionUtils.getPage(result, pageable, + () -> this.entityOperations.count(createQuery(), getExampleType())); + } + + @SuppressWarnings("unchecked") + private List mapContent(List content) { + + Function conversionFunction = getConversionFunction(); + + if (conversionFunction == Function.identity()) { + return (List) content; + } List result = new ArrayList<>(content.size()); for (S s : content) { - result.add(getConversionFunction().apply(s)); + result.add(conversionFunction.apply(s)); } - return PageableExecutionUtils.getPage(result, pageable, () -> this.entityOperations.count(createQuery(), getExampleType())); + return result; } @Override public Stream stream() { - - return StreamSupport - .stream(this.entityOperations.findAll(createQuery().sort(getSort()), getExampleType()).spliterator(), false) - .map(item -> this.getConversionFunction().apply(item)); + return this.entityOperations.streamAll(createQuery().sort(getSort()), getExampleType()) + .map(getConversionFunction()); } @Override @@ -173,7 +175,6 @@ class FetchableFluentQueryByExample extends FluentQuerySupport { } query = query.limit(getLimit()); - query = queryCustomizer.apply(query); return query; 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 2d5b68daf..b7ae5976d 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 @@ -147,10 +147,7 @@ public class SimpleJdbcRepository Assert.notNull(pageable, "Pageable must not be null"); - Query query1 = Query.query(CriteriaDefinition.empty()); - - - Query query = query1.with(pageable); + Query query = Query.query(CriteriaDefinition.empty()).with(pageable); List content = entityOperations.findAll(query, entity.getType()); return PageableExecutionUtils.getPage(content, pageable, () -> entityOperations.count(entity.getType())); @@ -189,11 +186,7 @@ public class SimpleJdbcRepository Assert.notNull(pageable, "Pageable must not be null"); Query mappedQuery = this.exampleMapper.getMappedExample(example); - - - Query contentQuery = mappedQuery.with(pageable); - - List content = this.entityOperations.findAll(contentQuery, example.getProbeType()); + List content = this.entityOperations.findAll(mappedQuery.with(pageable), example.getProbeType()); return PageableExecutionUtils.getPage(content, pageable, () -> this.entityOperations.count(mappedQuery, example.getProbeType())); diff --git a/spring-data-jdbc/src/main/kotlin/org/springframework/data/jdbc/core/JdbcAggregateOperationsExtensions.kt b/spring-data-jdbc/src/main/kotlin/org/springframework/data/jdbc/core/JdbcAggregateOperationsExtensions.kt index 25ee0fd31..733cb05a9 100644 --- a/spring-data-jdbc/src/main/kotlin/org/springframework/data/jdbc/core/JdbcAggregateOperationsExtensions.kt +++ b/spring-data-jdbc/src/main/kotlin/org/springframework/data/jdbc/core/JdbcAggregateOperationsExtensions.kt @@ -20,7 +20,7 @@ import org.springframework.data.domain.Page import org.springframework.data.domain.Pageable import org.springframework.data.domain.Sort import org.springframework.data.relational.core.query.Query -import java.util.Optional +import java.util.* /** * Kotlin extensions for [JdbcAggregateOperations]. @@ -80,7 +80,7 @@ inline fun JdbcAggregateOperations.findAll(sort: Sort): List = /** * Extension for [JdbcAggregateOperations.findAll] with pagination. */ -@Deprecated("Use a combination of operations of this class to construct results of type Page") +@Deprecated("Since 3.5.6, use a findAll() and count() to construct results of type Page") inline fun JdbcAggregateOperations.findAll(pageable: Pageable): Page = findAll(T::class.java, pageable) @@ -99,6 +99,7 @@ inline fun JdbcAggregateOperations.findAll(query: Query): List = /** * Extension for [JdbcAggregateOperations.findAll] with query and pagination. */ +@Deprecated("Since 3.5.6, use a findAll(Query) and count(Query) to construct results of type Page") inline fun JdbcAggregateOperations.findAll(query: Query, pageable: Pageable): Page = findAll(query, T::class.java, pageable)