From a4c1505bece05f2b6664536fc64785179774426d Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Fri, 25 Sep 2020 15:41:33 +0200 Subject: [PATCH] DATAES-938 - Fix collection query detection in ReactiveElasticsearchQueryMethod. isCollectionQuery() now correctly identifies if a query should return more than one result. --- .../query/ReactiveElasticsearchQueryMethod.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/query/ReactiveElasticsearchQueryMethod.java b/src/main/java/org/springframework/data/elasticsearch/repository/query/ReactiveElasticsearchQueryMethod.java index eecad7b69..baae4cb20 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/query/ReactiveElasticsearchQueryMethod.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/query/ReactiveElasticsearchQueryMethod.java @@ -36,6 +36,7 @@ import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.util.ReactiveWrapperConverters; import org.springframework.data.repository.util.ReactiveWrappers; import org.springframework.data.util.ClassTypeInformation; +import org.springframework.data.util.Lazy; import org.springframework.data.util.TypeInformation; import org.springframework.util.ClassUtils; @@ -48,6 +49,7 @@ public class ReactiveElasticsearchQueryMethod extends ElasticsearchQueryMethod { private static final ClassTypeInformation PAGE_TYPE = ClassTypeInformation.from(Page.class); private static final ClassTypeInformation SLICE_TYPE = ClassTypeInformation.from(Slice.class); + private final Lazy isCollectionQuery; public ReactiveElasticsearchQueryMethod(Method method, RepositoryMetadata metadata, ProjectionFactory factory, MappingContext, ElasticsearchPersistentProperty> mappingContext) { @@ -80,6 +82,9 @@ public class ReactiveElasticsearchQueryMethod extends ElasticsearchQueryMethod { + "Use sorting capabilities on Pageble instead! Offending method: %s", method.toString())); } } + + this.isCollectionQuery = Lazy.of(() -> (!(isPageQuery() || isSliceQuery()) + && ReactiveWrappers.isMultiValueType(metadata.getReturnType(method).getType()) || super.isCollectionQuery())); } @Override @@ -103,6 +108,15 @@ public class ReactiveElasticsearchQueryMethod extends ElasticsearchQueryMethod { return false; } + /* + * (non-Javadoc) + * @see org.springframework.data.repository.query.QueryMethod#isCollectionQuery() + */ + @Override + public boolean isCollectionQuery() { + return isCollectionQuery.get(); + } + /* * (non-Javadoc) * @see org.springframework.data.repository.query.QueryMethod#isStreamQuery()