From 3f735def5f3ca81ccdfec51c887c3b8aa8c3b6c9 Mon Sep 17 00:00:00 2001 From: Thomas Amland Date: Tue, 13 Jan 2026 11:45:19 +0100 Subject: [PATCH] Fix writing collections where first element is null Closes #2215 Signed-off-by: Thomas Amland --- ...RepositoryCustomConversionIntegrationTests.java | 14 ++++++++++++++ .../conversion/MappingRelationalConverter.java | 11 +---------- 2 files changed, 15 insertions(+), 10 deletions(-) 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 4b1eeecd5..c19566434 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 @@ -809,16 +809,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");