Skip to content

Commit 519a2eb

Browse files
schaudermp911de
authored andcommitted
Deprecate methods accepting Query and Pageable returning Page.
Since both the Query and the Pageable have limit, offset and sorting information, these methods are confusing and the strategy to resolve the conflict is not clear. Existing code using the methods got replaced. Users of these methods should use the various findAll and findBy methods to construct Page objects as desired. Closes #2138 Original pull request #2161
1 parent 70ba06a commit 519a2eb

File tree

6 files changed

+44
-7
lines changed

6 files changed

+44
-7
lines changed

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateOperations.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,9 @@ public interface JdbcAggregateOperations {
226226
* @param pageable the pagination information. Must not be {@code null}.
227227
* @return Guaranteed to be not {@code null}.
228228
* @since 2.0
229+
* @deprecated use a combination of other methods of this class to construct results of type {@link Page}.
229230
*/
231+
@Deprecated(since = "4.0")
230232
<T> Page<T> findAll(Class<T> domainType, Pageable pageable);
231233

232234
/**
@@ -271,7 +273,9 @@ public interface JdbcAggregateOperations {
271273
* @param pageable can be null.
272274
* @return a {@link Page} of entities matching the given {@link Example}.
273275
* @since 3.0
276+
* @deprecated use a combination of other methods of this class to construct results of type {@link Page}.
274277
*/
278+
@Deprecated(since = "4.0")
275279
<T> Page<T> findAll(Query query, Class<T> domainType, Pageable pageable);
276280

277281
/**

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateTemplate.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ public <T> Stream<T> streamAll(Class<T> domainType, Sort sort) {
313313
return allStreamable.map(this::triggerAfterConvert);
314314
}
315315

316+
@Deprecated
316317
@Override
317318
public <T> Page<T> findAll(Class<T> domainType, Pageable pageable) {
318319

@@ -342,6 +343,7 @@ public <T> Stream<T> streamAll(Query query, Class<T> domainType) {
342343
return accessStrategy.streamAll(query, domainType).map(this::triggerAfterConvert);
343344
}
344345

346+
@Deprecated
345347
@Override
346348
public <T> Page<T> findAll(Query query, Class<T> domainType, Pageable pageable) {
347349

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/FetchableFluentQueryByExample.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.springframework.data.relational.core.conversion.RelationalConverter;
3737
import org.springframework.data.relational.core.query.Query;
3838
import org.springframework.data.relational.repository.query.RelationalExampleMapper;
39+
import org.springframework.data.support.PageableExecutionUtils;
3940
import org.springframework.util.Assert;
4041

4142
/**
@@ -130,8 +131,15 @@ public Window<R> scroll(ScrollPosition scrollPosition) {
130131
@Override
131132
public Page<R> page(Pageable pageable) {
132133

133-
return this.entityOperations.findAll(createQuery(p -> p.with(pageable)), getExampleType(), pageable)
134-
.map(item -> this.getConversionFunction().apply(item));
134+
Query contentQuery = createQuery(p -> p.with(pageable));
135+
List<S> content = this.entityOperations.findAll(contentQuery, getExampleType());
136+
137+
List<R> result = new ArrayList<>(content.size());
138+
for (S s : content) {
139+
result.add(getConversionFunction().apply(s));
140+
}
141+
142+
return PageableExecutionUtils.getPage(result, pageable, () -> this.entityOperations.count(createQuery(), getExampleType()));
135143
}
136144

137145
@Override

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/SimpleJdbcRepository.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,14 @@
2727
import org.springframework.data.jdbc.core.convert.JdbcConverter;
2828
import org.springframework.data.mapping.PersistentEntity;
2929
import org.springframework.data.projection.SpelAwareProxyProjectionFactory;
30+
import org.springframework.data.relational.core.query.CriteriaDefinition;
31+
import org.springframework.data.relational.core.query.Query;
3032
import org.springframework.data.relational.repository.query.RelationalExampleMapper;
3133
import org.springframework.data.repository.CrudRepository;
3234
import org.springframework.data.repository.PagingAndSortingRepository;
3335
import org.springframework.data.repository.query.FluentQuery;
3436
import org.springframework.data.repository.query.QueryByExampleExecutor;
37+
import org.springframework.data.support.PageableExecutionUtils;
3538
import org.springframework.transaction.annotation.Transactional;
3639
import org.springframework.util.Assert;
3740

@@ -141,7 +144,16 @@ public List<T> findAll(Sort sort) {
141144

142145
@Override
143146
public Page<T> findAll(Pageable pageable) {
144-
return entityOperations.findAll(entity.getType(), pageable);
147+
148+
Assert.notNull(pageable, "Pageable must not be null");
149+
150+
Query query1 = Query.query(CriteriaDefinition.empty());
151+
152+
153+
Query query = query1.with(pageable);
154+
List<T> content = entityOperations.findAll(query, entity.getType());
155+
156+
return PageableExecutionUtils.getPage(content, pageable, () -> entityOperations.count(entity.getType()));
145157
}
146158

147159
@Override
@@ -174,9 +186,17 @@ public <S extends T> List<S> findAll(Example<S> example, Sort sort) {
174186
public <S extends T> Page<S> findAll(Example<S> example, Pageable pageable) {
175187

176188
Assert.notNull(example, "Example must not be null");
189+
Assert.notNull(pageable, "Pageable must not be null");
177190

178-
return this.entityOperations.findAll(this.exampleMapper.getMappedExample(example), example.getProbeType(),
179-
pageable);
191+
Query mappedQuery = this.exampleMapper.getMappedExample(example);
192+
193+
194+
Query contentQuery = mappedQuery.with(pageable);
195+
196+
List<S> content = this.entityOperations.findAll(contentQuery, example.getProbeType());
197+
198+
return PageableExecutionUtils.getPage(content, pageable,
199+
() -> this.entityOperations.count(mappedQuery, example.getProbeType()));
180200
}
181201

182202
@Override
@@ -205,4 +225,5 @@ public <S extends T, R> R findBy(Example<S> example, Function<FluentQuery.Fetcha
205225

206226
return queryFunction.apply(fluentQuery);
207227
}
228+
208229
}

spring-data-jdbc/src/main/kotlin/org/springframework/data/jdbc/core/JdbcAggregateOperationsExtensions.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ inline fun <reified T> JdbcAggregateOperations.findAll(sort: Sort): List<T> =
8080
/**
8181
* Extension for [JdbcAggregateOperations.findAll] with pagination.
8282
*/
83+
@Deprecated("Use a combination of operations of this class to construct results of type Page")
8384
inline fun <reified T> JdbcAggregateOperations.findAll(pageable: Pageable): Page<T> =
8485
findAll(T::class.java, pageable)
8586

@@ -117,4 +118,4 @@ inline fun <reified T> JdbcAggregateOperations.deleteAllById(ids: Iterable<*>):
117118
* Extension for [JdbcAggregateOperations.deleteAll].
118119
*/
119120
inline fun <reified T> JdbcAggregateOperations.deleteAll(): Unit =
120-
deleteAll(T::class.java)
121+
deleteAll(T::class.java)

spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/SimpleJdbcRepositoryEventsUnitTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
import org.springframework.data.relational.core.mapping.event.Identifier;
6464
import org.springframework.data.relational.core.mapping.event.RelationalEvent;
6565
import org.springframework.data.relational.core.mapping.event.WithId;
66+
import org.springframework.data.relational.core.query.Query;
6667
import org.springframework.data.repository.CrudRepository;
6768
import org.springframework.data.repository.PagingAndSortingRepository;
6869
import org.springframework.jdbc.core.JdbcOperations;
@@ -277,7 +278,7 @@ void publishesEventsOnFindAllPaged() {
277278
DummyEntity entity1 = new DummyEntity(42L);
278279
DummyEntity entity2 = new DummyEntity(23L);
279280

280-
doReturn(asList(entity1, entity2)).when(dataAccessStrategy).findAll(any(), any(Pageable.class));
281+
doReturn(asList(entity1, entity2)).when(dataAccessStrategy).findAll(any(Query.class), any(Class.class));
281282
doReturn(2L).when(dataAccessStrategy).count(any());
282283

283284
repository.findAll(PageRequest.of(0, 20));

0 commit comments

Comments
 (0)