DATAES-969 - Use ResultProcessor in ElasticsearchPartQuery to build PartTree.

This commit is contained in:
Peter-Josef Meisch 2020-11-07 20:00:59 +01:00
parent 8a20df24d2
commit 08ec8a5dd2
No known key found for this signature in database
GPG Key ID: DE108246970C7708
2 changed files with 14 additions and 11 deletions

View File

@ -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) {

View File

@ -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) {