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 66201877e..19684cc64 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; @@ -68,6 +67,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; @@ -549,6 +549,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(); @@ -625,6 +641,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