From 2067fb6952e0bea8f1fb1e5697250e95b455a39b Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Tue, 15 Aug 2017 07:14:08 +0200 Subject: [PATCH] DATAJDBC-124 - findById now returns Optional.empty when no data is found. The uderlying JdbcEntityTemplate still throws exceptions coming from the NamedParameterJdbcTemplate. --- .../data/jdbc/repository/SimpleJdbcRepository.java | 8 ++++++-- .../jdbc/repository/JdbcRepositoryIntegrationTests.java | 8 ++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/data/jdbc/repository/SimpleJdbcRepository.java b/src/main/java/org/springframework/data/jdbc/repository/SimpleJdbcRepository.java index cbd2102b..9ec47855 100644 --- a/src/main/java/org/springframework/data/jdbc/repository/SimpleJdbcRepository.java +++ b/src/main/java/org/springframework/data/jdbc/repository/SimpleJdbcRepository.java @@ -19,9 +19,9 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; +import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.data.jdbc.core.JdbcEntityOperations; import org.springframework.data.jdbc.core.JdbcEntityTemplate; -import org.springframework.data.jdbc.mapping.model.JdbcPersistentEntity; import org.springframework.data.jdbc.mapping.model.JdbcPersistentEntityInformation; import org.springframework.data.repository.CrudRepository; @@ -76,7 +76,11 @@ public class SimpleJdbcRepository implements CrudRepository { @Override public Optional findById(ID id) { - return Optional.ofNullable(entityOperations.findById(id, entityInformation.getJavaType())); + try { + return Optional.of(entityOperations.findById(id, entityInformation.getJavaType())); + } catch (EmptyResultDataAccessException ex) { + return Optional.empty(); + } } /* diff --git a/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java b/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java index c7e9d67d..8f9003d2 100644 --- a/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java +++ b/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java @@ -233,6 +233,14 @@ public class JdbcRepositoryIntegrationTests { .containsExactlyInAnyOrder(entity.getName(), other.getName()); } + @Test // DATAJDBC-112 + public void findByIdReturnsEmptyWhenNoneFound() { + + // NOT saving anything, so DB is empty + + assertThat(repository.findById(-1L)).isEmpty(); + } + private static DummyEntity createDummyEntity() { DummyEntity entity = new DummyEntity();