diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQuery.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQuery.java index c6d35f6b..b1a73f63 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQuery.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQuery.java @@ -165,7 +165,7 @@ public class StringBasedJdbcQuery extends AbstractJdbcQuery { RelationalParameters.RelationalParameter parameter = queryMethod.getParameters().getParameter(p.getIndex()); ResolvableType resolvableType = parameter.getResolvableType(); Class type = resolvableType.resolve(); - Assert.notNull(type, "@Query parameter could not be resolved!"); + Assert.notNull(type, "@Query parameter type could not be resolved!"); JdbcValue jdbcValue; if (value instanceof Iterable) { @@ -174,7 +174,9 @@ public class StringBasedJdbcQuery extends AbstractJdbcQuery { SQLType jdbcType = null; Class elementType = resolvableType.getGeneric(0).resolve(); + Assert.notNull(elementType, "@Query Iterable parameter generic type could not be resolved!"); + for (Object o : (Iterable) value) { JdbcValue elementJdbcValue = converter.writeJdbcValue(o, elementType, JdbcUtil.targetSqlTypeFor(JdbcColumnTypes.INSTANCE.resolvePrimitiveType(elementType))); diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryCustomConversionIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryCustomConversionIntegrationTests.java index 6ae8f6c5..0203b6e4 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryCustomConversionIntegrationTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryCustomConversionIntegrationTests.java @@ -179,6 +179,7 @@ public class JdbcRepositoryCustomConversionIntegrationTests { } interface EntityWithStringyBigDecimalRepository extends CrudRepository { + @Query("SELECT * FROM ENTITY_WITH_STRINGY_BIG_DECIMAL WHERE DIRECTION IN (:types)") List findByEnumTypeIn(List types); diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryCustomConversionIntegrationTests-oracle.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryCustomConversionIntegrationTests-oracle.sql index 1d653cf4..b42ab925 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryCustomConversionIntegrationTests-oracle.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryCustomConversionIntegrationTests-oracle.sql @@ -4,7 +4,7 @@ DROP TABLE OTHER_ENTITY CASCADE CONSTRAINTS PURGE; CREATE TABLE ENTITY_WITH_STRINGY_BIG_DECIMAL ( ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY, STRINGY_NUMBER DECIMAL(20,10), - DIRECTION INTEGER + DIRECTION NUMBER(1,0) ); CREATE TABLE OTHER_ENTITY (