From 63f233172794e14fbe53b3f0b6485a130721b694 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Mon, 21 Feb 2022 14:54:22 +0100 Subject: [PATCH] Avoid conversion when return value is null. Closes #1167 --- .../repository/query/AbstractJdbcQuery.java | 2 +- .../JdbcRepositoryIntegrationTests.java | 22 ++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/AbstractJdbcQuery.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/AbstractJdbcQuery.java index 2d7df924e..f9f2b2e48 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/AbstractJdbcQuery.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/AbstractJdbcQuery.java @@ -184,7 +184,7 @@ public abstract class AbstractJdbcQuery implements RepositoryQuery { T object = delegate.mapRow(rs, rowNum); - return converter.convert(object); + return object == null ? null : converter.convert(object); } } } diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java index 048a78a5d..cfaa6df57 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java @@ -37,7 +37,6 @@ import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.PropertiesFactoryBean; import org.springframework.context.ApplicationListener; @@ -70,6 +69,7 @@ import org.springframework.data.repository.query.Param; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.lang.Nullable; import org.springframework.test.context.TestExecutionListeners; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.jdbc.JdbcTestUtils; @@ -559,6 +559,22 @@ public class JdbcRepositoryIntegrationTests { assertThat(result).extracting(e -> e.idProp).containsExactly(two.idProp); } + @Test // GH-1167 + void stringResult() { + + repository.save(createDummyEntity()); // just ensure we have data in the table + + assertThat(repository.returnInput("HELLO")).isEqualTo("HELLO"); + } + + @Test // GH-1167 + void nullStringResult() { + + repository.save(createDummyEntity()); // just ensure we have data in the table + + assertThat(repository.returnInput(null)).isNull(); + } + private Instant createDummyBeforeAndAfterNow() { Instant now = Instant.now(); @@ -640,6 +656,10 @@ public class JdbcRepositoryIntegrationTests { List findByRef(int ref); List findByRef(AggregateReference ref); + + @Query("SELECT CAST(:hello AS CHAR(5)) FROM DUMMY_ENTITY") + @Nullable + String returnInput(@Nullable String hello); } @Configuration