Skip to content

Commit 09189a4

Browse files
committed
Polishing.
Simplify TypeInformation creation from a MethodParameter. Original pull request: #1356 See #1343
1 parent d1e039a commit 09189a4

File tree

2 files changed

+14
-17
lines changed

2 files changed

+14
-17
lines changed

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQuery.java

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525

2626
import org.springframework.beans.BeanUtils;
2727
import org.springframework.beans.factory.BeanFactory;
28-
import org.springframework.core.ResolvableType;
2928
import org.springframework.core.convert.converter.Converter;
3029
import org.springframework.data.jdbc.core.convert.JdbcColumnTypes;
3130
import org.springframework.data.jdbc.core.convert.JdbcConverter;
@@ -41,6 +40,7 @@
4140
import org.springframework.data.repository.query.ResultProcessor;
4241
import org.springframework.data.repository.query.SpelEvaluator;
4342
import org.springframework.data.repository.query.SpelQueryContext;
43+
import org.springframework.data.util.TypeInformation;
4444
import org.springframework.jdbc.core.ResultSetExtractor;
4545
import org.springframework.jdbc.core.RowMapper;
4646
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
@@ -185,23 +185,18 @@ private void convertAndAddParameter(MapSqlParameterSource parameters, Parameter
185185
String parameterName = p.getName().orElseThrow(() -> new IllegalStateException(PARAMETER_NEEDS_TO_BE_NAMED));
186186

187187
RelationalParameters.RelationalParameter parameter = getQueryMethod().getParameters().getParameter(p.getIndex());
188-
ResolvableType resolvableType = parameter.getResolvableType();
189-
Class<?> type = resolvableType.resolve();
190-
Assert.notNull(type, "@Query parameter type could not be resolved");
188+
TypeInformation<?> typeInformation = parameter.getTypeInformation();
191189

192190
JdbcValue jdbcValue;
193-
if (value instanceof Collection && resolvableType.hasGenerics()) {
191+
if (typeInformation.isCollectionLike() && value instanceof Collection<?>) {
194192

195193
List<Object> mapped = new ArrayList<>();
196194
SQLType jdbcType = null;
197195

198-
Class<?> elementType = resolvableType.getGeneric(0).resolve();
199-
200-
Assert.notNull(elementType, "@Query Iterable parameter generic type could not be resolved");
201-
196+
TypeInformation<?> actualType = typeInformation.getRequiredActualType();
202197
for (Object o : (Iterable<?>) value) {
203-
JdbcValue elementJdbcValue = converter.writeJdbcValue(o, elementType,
204-
JdbcUtil.targetSqlTypeFor(JdbcColumnTypes.INSTANCE.resolvePrimitiveType(elementType)));
198+
JdbcValue elementJdbcValue = converter.writeJdbcValue(o, actualType.getType(),
199+
JdbcUtil.targetSqlTypeFor(JdbcColumnTypes.INSTANCE.resolvePrimitiveType(actualType.getType())));
205200
if (jdbcType == null) {
206201
jdbcType = elementJdbcValue.getJdbcType();
207202
}
@@ -211,8 +206,8 @@ private void convertAndAddParameter(MapSqlParameterSource parameters, Parameter
211206

212207
jdbcValue = JdbcValue.of(mapped, jdbcType);
213208
} else {
214-
jdbcValue = converter.writeJdbcValue(value, type,
215-
JdbcUtil.targetSqlTypeFor(JdbcColumnTypes.INSTANCE.resolvePrimitiveType(type)));
209+
jdbcValue = converter.writeJdbcValue(value, typeInformation.getType(),
210+
JdbcUtil.targetSqlTypeFor(JdbcColumnTypes.INSTANCE.resolvePrimitiveType(typeInformation.getType())));
216211
}
217212

218213
SQLType jdbcType = jdbcValue.getJdbcType();

spring-data-relational/src/main/java/org/springframework/data/relational/repository/query/RelationalParameters.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
package org.springframework.data.relational.repository.query;
1717

1818
import java.lang.reflect.Method;
19-
import java.lang.reflect.Type;
2019
import java.util.List;
2120

2221
import org.springframework.core.MethodParameter;
2322
import org.springframework.core.ResolvableType;
2423
import org.springframework.data.relational.repository.query.RelationalParameters.RelationalParameter;
2524
import org.springframework.data.repository.query.Parameter;
2625
import org.springframework.data.repository.query.Parameters;
26+
import org.springframework.data.util.TypeInformation;
2727

2828
/**
2929
* Custom extension of {@link Parameters}.
@@ -75,10 +75,12 @@ public static class RelationalParameter extends Parameter {
7575
this.parameter = parameter;
7676
}
7777

78-
7978
public ResolvableType getResolvableType() {
80-
return ResolvableType
81-
.forClassWithGenerics(super.getType(), ResolvableType.forMethodParameter(this.parameter).getGenerics());
79+
return getTypeInformation().toTypeDescriptor().getResolvableType();
80+
}
81+
82+
public TypeInformation<?> getTypeInformation() {
83+
return TypeInformation.fromMethodParameter(parameter);
8284
}
8385
}
8486
}

0 commit comments

Comments
 (0)