From 08ec8a5dd2d6f8fc48caab3bc78452f96c182477 Mon Sep 17 00:00:00 2001 From: Peter-Josef Meisch Date: Sat, 7 Nov 2020 20:00:59 +0100 Subject: [PATCH] DATAES-969 - Use ResultProcessor in ElasticsearchPartQuery to build PartTree. --- .../query/ElasticsearchPartQuery.java | 18 ++++++++++-------- .../query/ElasticsearchStringQuery.java | 7 ++++--- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchPartQuery.java b/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchPartQuery.java index 98c2c43de..595360c33 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchPartQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchPartQuery.java @@ -47,7 +47,7 @@ public class ElasticsearchPartQuery extends AbstractElasticsearchRepositoryQuery public ElasticsearchPartQuery(ElasticsearchQueryMethod method, ElasticsearchOperations elasticsearchOperations) { super(method, elasticsearchOperations); - this.tree = new PartTree(method.getName(), method.getEntityInformation().getJavaType()); + this.tree = new PartTree(method.getName(), method.getResultProcessor().getReturnedType().getDomainType()); this.mappingContext = elasticsearchOperations.getElasticsearchConverter().getMappingContext(); } @@ -58,15 +58,17 @@ public class ElasticsearchPartQuery extends AbstractElasticsearchRepositoryQuery CriteriaQuery query = createQuery(accessor); Assert.notNull(query, "unsupported query"); + Class clazz = queryMethod.getResultProcessor().getReturnedType().getDomainType(); + if (tree.isDelete()) { Object result = countOrGetDocumentsForDelete(query, accessor); - elasticsearchOperations.delete(query, queryMethod.getEntityInformation().getJavaType()); + elasticsearchOperations.delete(query, clazz); return result; } else if (queryMethod.isPageQuery()) { query.setPageable(accessor.getPageable()); - return elasticsearchOperations.queryForPage(query, queryMethod.getEntityInformation().getJavaType()); + return elasticsearchOperations.queryForPage(query, clazz); } else if (queryMethod.isStreamQuery()) { - Class entityType = queryMethod.getEntityInformation().getJavaType(); + Class entityType = clazz; if (accessor.getPageable().isUnpaged()) { query.setPageable(PageRequest.of(0, DEFAULT_STREAM_BATCH_SIZE)); } else { @@ -78,18 +80,18 @@ public class ElasticsearchPartQuery extends AbstractElasticsearchRepositoryQuery if (accessor.getPageable().isUnpaged()) { - int itemCount = (int) elasticsearchOperations.count(query, queryMethod.getEntityInformation().getJavaType()); + int itemCount = (int) elasticsearchOperations.count(query, clazz); query.setPageable(PageRequest.of(0, Math.max(1, itemCount))); } else { query.setPageable(accessor.getPageable()); } - return elasticsearchOperations.queryForList(query, queryMethod.getEntityInformation().getJavaType()); + return elasticsearchOperations.queryForList(query, clazz); } else if (tree.isCountProjection()) { - return elasticsearchOperations.count(query, queryMethod.getEntityInformation().getJavaType()); + return elasticsearchOperations.count(query, clazz); } - return elasticsearchOperations.queryForObject(query, queryMethod.getEntityInformation().getJavaType()); + return elasticsearchOperations.queryForObject(query, clazz); } private Object countOrGetDocumentsForDelete(CriteriaQuery query, ParametersParameterAccessor accessor) { diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQuery.java b/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQuery.java index 28a7bc046..0599ff3d9 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQuery.java @@ -64,17 +64,18 @@ public class ElasticsearchStringQuery extends AbstractElasticsearchRepositoryQue public Object execute(Object[] parameters) { ParametersParameterAccessor accessor = new ParametersParameterAccessor(queryMethod.getParameters(), parameters); StringQuery stringQuery = createQuery(accessor); + Class clazz = queryMethod.getResultProcessor().getReturnedType().getDomainType(); if (queryMethod.isPageQuery()) { stringQuery.setPageable(accessor.getPageable()); - return elasticsearchOperations.queryForPage(stringQuery, queryMethod.getEntityInformation().getJavaType()); + return elasticsearchOperations.queryForPage(stringQuery, clazz); } else if (queryMethod.isCollectionQuery()) { if (accessor.getPageable().isPaged()) { stringQuery.setPageable(accessor.getPageable()); } - return elasticsearchOperations.queryForList(stringQuery, queryMethod.getEntityInformation().getJavaType()); + return elasticsearchOperations.queryForList(stringQuery, clazz); } - return elasticsearchOperations.queryForObject(stringQuery, queryMethod.getEntityInformation().getJavaType()); + return elasticsearchOperations.queryForObject(stringQuery, clazz); } protected StringQuery createQuery(ParametersParameterAccessor parameterAccessor) {