25
25
26
26
import org .springframework .beans .BeanUtils ;
27
27
import org .springframework .beans .factory .BeanFactory ;
28
- import org .springframework .core .ResolvableType ;
29
28
import org .springframework .core .convert .converter .Converter ;
30
29
import org .springframework .data .jdbc .core .convert .JdbcColumnTypes ;
31
30
import org .springframework .data .jdbc .core .convert .JdbcConverter ;
41
40
import org .springframework .data .repository .query .ResultProcessor ;
42
41
import org .springframework .data .repository .query .SpelEvaluator ;
43
42
import org .springframework .data .repository .query .SpelQueryContext ;
43
+ import org .springframework .data .util .TypeInformation ;
44
44
import org .springframework .jdbc .core .ResultSetExtractor ;
45
45
import org .springframework .jdbc .core .RowMapper ;
46
46
import org .springframework .jdbc .core .namedparam .MapSqlParameterSource ;
@@ -184,23 +184,18 @@ private void convertAndAddParameter(MapSqlParameterSource parameters, Parameter
184
184
String parameterName = p .getName ().orElseThrow (() -> new IllegalStateException (PARAMETER_NEEDS_TO_BE_NAMED ));
185
185
186
186
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 ();
190
188
191
189
JdbcValue jdbcValue ;
192
- if (value instanceof Collection && resolvableType . hasGenerics () ) {
190
+ if (typeInformation . isCollectionLike () && value instanceof Collection <?> ) {
193
191
194
192
List <Object > mapped = new ArrayList <>();
195
193
SQLType jdbcType = null ;
196
194
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 ();
201
196
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 () )));
204
199
if (jdbcType == null ) {
205
200
jdbcType = elementJdbcValue .getJdbcType ();
206
201
}
@@ -210,8 +205,8 @@ private void convertAndAddParameter(MapSqlParameterSource parameters, Parameter
210
205
211
206
jdbcValue = JdbcValue .of (mapped , jdbcType );
212
207
} 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 () )));
215
210
}
216
211
217
212
SQLType jdbcType = jdbcValue .getJdbcType ();
0 commit comments