|
|
|
@ -16,13 +16,11 @@ |
|
|
|
package org.springframework.data.jdbc.repository.support; |
|
|
|
package org.springframework.data.jdbc.repository.support; |
|
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.Collection; |
|
|
|
|
|
|
|
import java.util.Collections; |
|
|
|
import java.util.Collections; |
|
|
|
import java.util.List; |
|
|
|
import java.util.List; |
|
|
|
import java.util.function.Function; |
|
|
|
import java.util.function.Function; |
|
|
|
import java.util.function.UnaryOperator; |
|
|
|
import java.util.function.UnaryOperator; |
|
|
|
import java.util.stream.Stream; |
|
|
|
import java.util.stream.Stream; |
|
|
|
import java.util.stream.StreamSupport; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.data.domain.Example; |
|
|
|
import org.springframework.data.domain.Example; |
|
|
|
import org.springframework.data.domain.OffsetScrollPosition; |
|
|
|
import org.springframework.data.domain.OffsetScrollPosition; |
|
|
|
@ -93,16 +91,8 @@ class FetchableFluentQueryByExample<S, R> extends FluentQuerySupport<S, R> { |
|
|
|
|
|
|
|
|
|
|
|
private List<R> findAll(Query query) { |
|
|
|
private List<R> findAll(Query query) { |
|
|
|
|
|
|
|
|
|
|
|
Function<Object, R> conversionFunction = this.getConversionFunction(); |
|
|
|
List<S> raw = this.entityOperations.findAll(query, getExampleType()); |
|
|
|
Iterable<S> raw = this.entityOperations.findAll(query, getExampleType()); |
|
|
|
return mapContent(raw); |
|
|
|
|
|
|
|
|
|
|
|
List<R> result = new ArrayList<>(raw instanceof Collections ? ((Collection<?>) raw).size() : 16); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (S s : raw) { |
|
|
|
|
|
|
|
result.add(conversionFunction.apply(s)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
@ -133,21 +123,33 @@ class FetchableFluentQueryByExample<S, R> extends FluentQuerySupport<S, R> { |
|
|
|
|
|
|
|
|
|
|
|
Query contentQuery = createQuery(p -> p.with(pageable)); |
|
|
|
Query contentQuery = createQuery(p -> p.with(pageable)); |
|
|
|
List<S> content = this.entityOperations.findAll(contentQuery, getExampleType()); |
|
|
|
List<S> content = this.entityOperations.findAll(contentQuery, getExampleType()); |
|
|
|
|
|
|
|
List<R> result = mapContent(content); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return PageableExecutionUtils.getPage(result, pageable, |
|
|
|
|
|
|
|
() -> this.entityOperations.count(createQuery(), getExampleType())); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
|
|
|
|
private List<R> mapContent(List<S> content) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Function<Object, R> conversionFunction = getConversionFunction(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (conversionFunction == Function.identity()) { |
|
|
|
|
|
|
|
return (List<R>) content; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
List<R> result = new ArrayList<>(content.size()); |
|
|
|
List<R> result = new ArrayList<>(content.size()); |
|
|
|
for (S s : content) { |
|
|
|
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 |
|
|
|
@Override |
|
|
|
public Stream<R> stream() { |
|
|
|
public Stream<R> stream() { |
|
|
|
|
|
|
|
return this.entityOperations.streamAll(createQuery().sort(getSort()), getExampleType()) |
|
|
|
return StreamSupport |
|
|
|
.map(getConversionFunction()); |
|
|
|
.stream(this.entityOperations.findAll(createQuery().sort(getSort()), getExampleType()).spliterator(), false) |
|
|
|
|
|
|
|
.map(item -> this.getConversionFunction().apply(item)); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
@ -173,7 +175,6 @@ class FetchableFluentQueryByExample<S, R> extends FluentQuerySupport<S, R> { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query = query.limit(getLimit()); |
|
|
|
query = query.limit(getLimit()); |
|
|
|
|
|
|
|
|
|
|
|
query = queryCustomizer.apply(query); |
|
|
|
query = queryCustomizer.apply(query); |
|
|
|
|
|
|
|
|
|
|
|
return query; |
|
|
|
return query; |
|
|
|
|