From 050089efcc04987180b98866d128344a489345ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=8Cedomir=20Igaly?= Date: Tue, 17 Dec 2024 15:41:09 +0100 Subject: [PATCH] HHH-18960 If query parameter allows multiple value binding, accept List, Set, or Collection with parameter type as generic type --- .../annotation/AnnotationMetaEntity.java | 7 +++++-- .../processor/annotation/NamedQueryMethod.java | 18 ++++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java index 162d6de043..e2fa85d1b3 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java @@ -64,6 +64,7 @@ import static java.beans.Introspector.decapitalize; import static java.lang.Boolean.FALSE; import static java.util.Collections.emptyList; +import static java.util.Objects.requireNonNullElse; import static java.util.stream.Collectors.toList; import static javax.lang.model.util.ElementFilter.fieldsIn; import static javax.lang.model.util.ElementFilter.methodsIn; @@ -2738,11 +2739,13 @@ private void checkParameter( if ( queryParamType!=null //TODO: arguments of functions get assigned "unknown" which sucks && !"unknown".equals(queryParamType) ) { + final String realQueryParamType = + requireNonNullElse( context.qualifiedNameForEntityName( queryParamType ), queryParamType ); if ( param.getName() != null ) { - checkNamedParameter(param, paramNames, paramTypes, method, mirror, value, queryParamType); + checkNamedParameter(param, paramNames, paramTypes, method, mirror, value, realQueryParamType); } else if ( param.getPosition() != null ) { - checkOrdinalParameter(param, paramNames, paramTypes, method, mirror, value, queryParamType); + checkOrdinalParameter(param, paramNames, paramTypes, method, mirror, value, realQueryParamType); } } } diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/NamedQueryMethod.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/NamedQueryMethod.java index 5f8a8fc9ef..d4f49592f2 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/NamedQueryMethod.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/NamedQueryMethod.java @@ -148,10 +148,20 @@ private void parameters(TreeSet> sortedParameters, StringBuilder declaration .append(", "); } - declaration - .append(parameterType(param)) - .append(" ") - .append(parameterName(param)); + if ( param.allowMultiValuedBinding() ) { + declaration + .append(annotationMeta.importType(Constants.LIST)) + .append('<') + .append( parameterType( param ) ) + .append("> ") + .append( parameterName( param ) ); + } + else { + declaration + .append( parameterType( param ) ) + .append( " " ) + .append( parameterName( param ) ); + } } declaration .append(')');