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 d8669635d..ae4e2212f 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 @@ -21,6 +21,7 @@ import static org.assertj.core.api.SoftAssertions.*; import java.math.BigDecimal; import java.sql.JDBCType; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Set; @@ -182,6 +183,19 @@ public class JdbcRepositoryCustomConversionIntegrationTests { assertThat(reloaded).isEqualTo(saved); } + @Test + @EnabledOnFeature(TestDatabaseFeatures.Feature.SUPPORTS_ARRAYS) + void saveAndLoadListOfNullAsArray() { + var list = new ArrayList(); + list.add(null); + + EntityWithDirections saved = repositoryWithDirections.save(new EntityWithDirections(null, list)); + + EntityWithDirections reloaded = repositoryWithDirections.findById(saved.id).orElseThrow(); + + assertThat(reloaded).isEqualTo(saved); + } + interface EntityWithStringyBigDecimalRepository extends CrudRepository { @Query("SELECT * FROM ENTITY_WITH_STRINGY_BIG_DECIMAL WHERE DIRECTION IN (:types)") diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/MappingRelationalConverter.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/MappingRelationalConverter.java index de9ea95b1..aaad549f9 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/MappingRelationalConverter.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/MappingRelationalConverter.java @@ -812,16 +812,7 @@ public class MappingRelationalConverter extends AbstractRelationalConverter return mapped; } - // if we succeeded converting the members of the collection, we actually ignore the fallback targetType since that - // was derived without considering custom conversions. - Class targetType = type.getType(); - if (!mapped.isEmpty()) { - - Class targetComponentType = mapped.get(0).getClass(); - targetType = Array.newInstance(targetComponentType, 0).getClass(); - } - - Object converted = getConversionService().convert(mapped, targetType); + Object converted = getConversionService().convert(mapped, type.getType()); Assert.state(converted != null, "Converted must not be null");