Skip to content

Commit afe6187

Browse files
committed
Polishing.
Simplify TypeInformation creation from a MethodParameter. Original pull request: #1356 See #1343
1 parent 1226ca9 commit afe6187

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

+8-13
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;
@@ -184,23 +184,18 @@ private void convertAndAddParameter(MapSqlParameterSource parameters, Parameter
184184
String parameterName = p.getName().orElseThrow(() -> new IllegalStateException(PARAMETER_NEEDS_TO_BE_NAMED));
185185

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

191189
JdbcValue jdbcValue;
192-
if (value instanceof Collection && resolvableType.hasGenerics()) {
190+
if (typeInformation.isCollectionLike() && value instanceof Collection<?>) {
193191

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

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

211206
jdbcValue = JdbcValue.of(mapped, jdbcType);
212207
} else {
213-
jdbcValue = converter.writeJdbcValue(value, type,
214-
JdbcUtil.targetSqlTypeFor(JdbcColumnTypes.INSTANCE.resolvePrimitiveType(type)));
208+
jdbcValue = converter.writeJdbcValue(value, typeInformation.getType(),
209+
JdbcUtil.targetSqlTypeFor(JdbcColumnTypes.INSTANCE.resolvePrimitiveType(typeInformation.getType())));
215210
}
216211

217212
SQLType jdbcType = jdbcValue.getJdbcType();

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

+6-4
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)