diff --git a/src/main/java/org/springframework/data/repository/query/Parameter.java b/src/main/java/org/springframework/data/repository/query/Parameter.java index d1603616f..2116f5729 100644 --- a/src/main/java/org/springframework/data/repository/query/Parameter.java +++ b/src/main/java/org/springframework/data/repository/query/Parameter.java @@ -215,6 +215,10 @@ public class Parameter { */ private static boolean isDynamicProjectionParameter(MethodParameter parameter) { + if (parameter.hasParameterAnnotation(Param.class)) { + return false; + } + Method method = parameter.getMethod(); if (method == null) { @@ -232,7 +236,8 @@ public class Parameter { TypeInformation returnType = ClassTypeInformation.fromReturnTypeOf(method); return bound - .equals(QueryExecutionConverters.unwrapWrapperTypes(ReactiveWrapperConverters.unwrapWrapperTypes(returnType))); + .equals(QueryExecutionConverters + .unwrapWrapperTypes(ReactiveWrapperConverters.unwrapWrapperTypes(returnType))); } /** diff --git a/src/test/java/org/springframework/data/repository/query/ParameterUnitTests.java b/src/test/java/org/springframework/data/repository/query/ParameterUnitTests.java index 72e12ed36..4e8ed171a 100644 --- a/src/test/java/org/springframework/data/repository/query/ParameterUnitTests.java +++ b/src/test/java/org/springframework/data/repository/query/ParameterUnitTests.java @@ -17,6 +17,7 @@ package org.springframework.data.repository.query; import static org.assertj.core.api.Assertions.*; +import java.lang.reflect.Method; import java.util.Collections; import java.util.List; import java.util.stream.Stream; @@ -48,14 +49,20 @@ class ParameterUnitTests { assertThat(parameter.isDynamicProjectionParameter()).isTrue(); } + @Test // #1452 + void doesNotConsiderAtParamAnnotatedClassParameterDynamicProjectionOne() throws Exception { + + Parameter parameter = new Parameter(getMethodParameter("atParamOnClass")); + + assertThat(parameter.isDynamicProjectionParameter()).isFalse(); + } + @NotNull private MethodParameter getMethodParameter(String methodName) throws NoSuchMethodException { - return new MethodParameter( // - this.getClass().getDeclaredMethod( // - methodName, // - Class.class // - ), // - 0); + + Method method = getClass().getDeclaredMethod(methodName, Class.class); + + return new MethodParameter(method, 0); } List dynamicProjectionWithList(Class type) { @@ -65,4 +72,8 @@ class ParameterUnitTests { Stream dynamicProjectionWithStream(Class type) { return Stream.empty(); } + + T atParamOnClass(@Param("type") Class type) { + return null; + } }