-
Notifications
You must be signed in to change notification settings - Fork 382
Open
Labels
status: waiting-for-triageAn issue we've not yet triagedAn issue we've not yet triaged
Description
In older versions of spring-data-relational it was possible to map collections of simple types containing null to a db array column. But this no longer works when the first element is null. If any element except for the first is null, it works as expected. Specifically, this example:
data class Entity(
@Id
val id: UUID,
val column: List<String?>, // text[] db column type
)
val entity = Entity(UUID.randomUUID(), listOf(null))
aggregateTemplate.insert(entity)throws the following error:
Cannot invoke "Object.getClass()" because the return value of "java.util.List.get(int)" is null
java.lang.NullPointerException: Cannot invoke "Object.getClass()" because the return value of "java.util.List.get(int)" is null
at org.springframework.data.relational.core.conversion.MappingRelationalConverter.writeCollection(MappingRelationalConverter.java:817)
at org.springframework.data.relational.core.conversion.MappingRelationalConverter.getPotentiallyConvertedSimpleWrite(MappingRelationalConverter.java:743)
at org.springframework.data.jdbc.core.convert.MappingJdbcConverter.getPotentiallyConvertedSimpleWrite(MappingJdbcConverter.java:256)
at org.springframework.data.relational.core.conversion.MappingRelationalConverter.writeValue(MappingRelationalConverter.java:721)
at org.springframework.data.jdbc.core.convert.MappingJdbcConverter.writeJdbcValue(MappingJdbcConverter.java:294)
at org.springframework.data.jdbc.core.convert.JdbcConverter.writeJdbcValue(JdbcConverter.java:50)
at org.springframework.data.jdbc.core.convert.SqlParametersFactory.addConvertedValue(SqlParametersFactory.java:244)
at org.springframework.data.jdbc.core.convert.SqlParametersFactory.addConvertedPropertyValue(SqlParametersFactory.java:231)
at org.springframework.data.jdbc.core.convert.SqlParametersFactory.lambda$getParameterSource$0(SqlParametersFactory.java:293)
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:325)
at org.springframework.data.mapping.PersistentEntity.doWithAll(PersistentEntity.java:270)
at org.springframework.data.jdbc.core.convert.SqlParametersFactory.getParameterSource(SqlParametersFactory.java:270)
at org.springframework.data.jdbc.core.convert.SqlParametersFactory.forInsert(SqlParametersFactory.java:86)
at org.springframework.data.jdbc.core.convert.DefaultDataAccessStrategy.insert(DefaultDataAccessStrategy.java:124)
at org.springframework.data.jdbc.core.JdbcAggregateChangeExecutionContext.executeInsertRoot(JdbcAggregateChangeExecutionContext.java:82)
at org.springframework.data.jdbc.core.AggregateChangeExecutor.execute(AggregateChangeExecutor.java:83)
at org.springframework.data.jdbc.core.AggregateChangeExecutor.lambda$executeSave$0(AggregateChangeExecutor.java:60)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at org.springframework.data.relational.core.conversion.SaveBatchingAggregateChange.forEachAction(SaveBatchingAggregateChange.java:68)
at org.springframework.data.jdbc.core.AggregateChangeExecutor.executeSave(AggregateChangeExecutor.java:60)
at org.springframework.data.jdbc.core.JdbcAggregateTemplate.performSave(JdbcAggregateTemplate.java:590)
at org.springframework.data.jdbc.core.JdbcAggregateTemplate.insert(JdbcAggregateTemplate.java:239)
This does not throw any error:
val entity = Entity(UUID.randomUUID(), listOf("a", null))
aggregateTemplate.insert(entity)This issue appears to have been introduced by 068c957
Metadata
Metadata
Assignees
Labels
status: waiting-for-triageAn issue we've not yet triagedAn issue we've not yet triaged