From 11d624f26609a5e03f305340b3a7e126cec158d8 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Sun, 15 Apr 2012 20:24:41 +0200 Subject: [PATCH] DATAJPA-177 - Throw exception if entity to delete does not exist. We now do an exists check inside SimpleJpaRepository.delete(ID id) before actually triggering the deletion to avoid an exception when trying to delete a null value. We throw an EmptyResultDataAccessException to indicate the nonexistent entity now. --- .../jpa/repository/support/SimpleJpaRepository.java | 7 +++++++ .../support/SimpleJpaRepositoryUnitTests.java | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java b/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java index c55477bc3b..48390cbc24 100644 --- a/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java +++ b/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java @@ -32,6 +32,7 @@ import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; +import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; @@ -121,6 +122,12 @@ private String getCountQueryString() { public void delete(ID id) { Assert.notNull(id, "The given id must not be null!"); + + if (!exists(id)) { + throw new EmptyResultDataAccessException(String.format("No %s entity with id %s exists!", + entityInformation.getJavaType(), id), 1); + } + delete(findOne(id)); } diff --git a/src/test/java/org/springframework/data/jpa/repository/support/SimpleJpaRepositoryUnitTests.java b/src/test/java/org/springframework/data/jpa/repository/support/SimpleJpaRepositoryUnitTests.java index 996a6c93be..d4318a1985 100644 --- a/src/test/java/org/springframework/data/jpa/repository/support/SimpleJpaRepositoryUnitTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/support/SimpleJpaRepositoryUnitTests.java @@ -27,6 +27,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.data.domain.PageRequest; import org.springframework.data.jpa.domain.sample.User; @@ -81,4 +82,13 @@ public void doesNotActuallyRetrieveObjectsForPageableOutOfRange() { verify(query, times(0)).getResultList(); } + + /** + * @see DATAJPA-177 + */ + @Test(expected = EmptyResultDataAccessException.class) + public void throwsExceptionIfEntityToDeleteDoesNotExist() { + + repo.delete(4711L); + } }