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 99e7c82a..8211e8ea 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 @@ -157,7 +157,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) { @@ -166,7 +166,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 ed365d04..e3ef001a 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 @@ -181,6 +181,7 @@ public class JdbcRepositoryCustomConversionIntegrationTests { } interface EntityWithStringyBigDecimalRepository extends CrudRepository { + @Query("SELECT * FROM ENTITY_WITH_STRINGY_BIG_DECIMAL WHERE DIRECTION IN (:types)") List findByEnumTypeIn(Set 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 (