From cc43be8d02cf7f86d0c2c6e1dabb5d8ea9ecf1c6 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Fri, 8 Dec 2023 11:58:59 +0100 Subject: [PATCH] Adopt `RelationalParameters` and `RelationalParameter` to reflect the actual parameter type when using generics. Closes #1691 --- .../repository/query/JdbcQueryMethod.java | 8 +++++--- .../repository/query/R2dbcQueryMethod.java | 10 ++++------ .../query/RelationalParameters.java | 20 ++++++++----------- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/JdbcQueryMethod.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/JdbcQueryMethod.java index 53ad79f71c3..a3d623731a5 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/JdbcQueryMethod.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/JdbcQueryMethod.java @@ -32,6 +32,8 @@ import org.springframework.data.relational.repository.query.SimpleRelationalEntityMetadata; import org.springframework.data.repository.core.NamedQueries; import org.springframework.data.repository.core.RepositoryMetadata; +import org.springframework.data.repository.query.Parameters; +import org.springframework.data.repository.query.ParametersSource; import org.springframework.data.repository.query.QueryMethod; import org.springframework.jdbc.core.ResultSetExtractor; import org.springframework.jdbc.core.RowMapper; @@ -71,8 +73,8 @@ public JdbcQueryMethod(Method method, RepositoryMetadata metadata, ProjectionFac } @Override - protected RelationalParameters createParameters(Method method) { - return new RelationalParameters(method); + protected Parameters createParameters(ParametersSource parametersSource) { + return new RelationalParameters(parametersSource); } @Override @@ -246,7 +248,7 @@ public boolean hasLockMode() { /** * Looks up the {@link Lock} annotation from the query method. - * + * * @return the {@link Optional} wrapped {@link Lock} annotation. */ Optional lookupLockAnnotation() { diff --git a/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/repository/query/R2dbcQueryMethod.java b/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/repository/query/R2dbcQueryMethod.java index 6fad6e34ccb..67a91e96db5 100644 --- a/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/repository/query/R2dbcQueryMethod.java +++ b/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/repository/query/R2dbcQueryMethod.java @@ -38,10 +38,11 @@ import org.springframework.data.relational.repository.query.SimpleRelationalEntityMetadata; import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.query.Parameter; +import org.springframework.data.repository.query.ParametersSource; import org.springframework.data.repository.query.QueryMethod; import org.springframework.data.repository.util.ReactiveWrapperConverters; -import org.springframework.data.util.ReactiveWrappers; import org.springframework.data.util.Lazy; +import org.springframework.data.util.ReactiveWrappers; import org.springframework.data.util.ReflectionUtils; import org.springframework.data.util.TypeInformation; import org.springframework.lang.Nullable; @@ -122,12 +123,9 @@ public R2dbcQueryMethod(Method method, RepositoryMetadata metadata, ProjectionFa this.lock = Optional.ofNullable(AnnotatedElementUtils.findMergedAnnotation(method, Lock.class)); } - /* (non-Javadoc) - * @see org.springframework.data.repository.query.QueryMethod#createParameters(java.lang.reflect.Method) - */ @Override - protected RelationalParameters createParameters(Method method) { - return new RelationalParameters(method); + protected RelationalParameters createParameters(ParametersSource parametersSource) { + return new RelationalParameters(parametersSource); } /* (non-Javadoc) diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/repository/query/RelationalParameters.java b/spring-data-relational/src/main/java/org/springframework/data/relational/repository/query/RelationalParameters.java index 0d87e448277..474c99ed4c4 100755 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/repository/query/RelationalParameters.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/repository/query/RelationalParameters.java @@ -15,7 +15,6 @@ */ package org.springframework.data.relational.repository.query; -import java.lang.reflect.Method; import java.util.List; import org.springframework.core.MethodParameter; @@ -23,6 +22,7 @@ import org.springframework.data.relational.repository.query.RelationalParameters.RelationalParameter; import org.springframework.data.repository.query.Parameter; import org.springframework.data.repository.query.Parameters; +import org.springframework.data.repository.query.ParametersSource; import org.springframework.data.util.TypeInformation; /** @@ -33,23 +33,19 @@ public class RelationalParameters extends Parameters { /** - * Creates a new {@link RelationalParameters} instance from the given {@link Method}. + * Creates a new {@link RelationalParameters} instance from the given {@link ParametersSource}. * - * @param method must not be {@literal null}. + * @param parametersSource must not be {@literal null}. */ - public RelationalParameters(Method method) { - super(method); + public RelationalParameters(ParametersSource parametersSource) { + super(parametersSource, + methodParameter -> new RelationalParameter(methodParameter, parametersSource.getDomainTypeInformation())); } private RelationalParameters(List parameters) { super(parameters); } - @Override - protected RelationalParameter createParameter(MethodParameter parameter) { - return new RelationalParameter(parameter); - } - @Override protected RelationalParameters createFrom(List parameters) { return new RelationalParameters(parameters); @@ -70,8 +66,8 @@ public static class RelationalParameter extends Parameter { * * @param parameter must not be {@literal null}. */ - RelationalParameter(MethodParameter parameter) { - super(parameter); + RelationalParameter(MethodParameter parameter, TypeInformation domainType) { + super(parameter, domainType); this.parameter = parameter; }