From f40b39c3ec1039c36f4545ee9a5f74c6451d850a Mon Sep 17 00:00:00 2001 From: "Greg L. Turnquist" Date: Mon, 5 Dec 2022 11:47:14 -0600 Subject: [PATCH] Do not throw an exception for deleteById when no rows are found. Comply with Spring Data Commons' new policy of not throwing an EmptyResultDataAccessException during deleteById. Resolves: #2719. Related: https://github.com/spring-projects/spring-data-commons/issues/2651 --- .../support/SimpleJpaRepository.java | 11 +++++++---- .../support/SimpleJpaRepositoryUnitTests.java | 19 +++++++++++-------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java index 0927afc23..5e1662dba 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java @@ -15,7 +15,12 @@ */ package org.springframework.data.jpa.repository.support; -import static org.springframework.data.jpa.repository.query.QueryUtils.*; +import static org.springframework.data.jpa.repository.query.QueryUtils.COUNT_QUERY_STRING; +import static org.springframework.data.jpa.repository.query.QueryUtils.DELETE_ALL_QUERY_BY_ID_STRING; +import static org.springframework.data.jpa.repository.query.QueryUtils.DELETE_ALL_QUERY_STRING; +import static org.springframework.data.jpa.repository.query.QueryUtils.applyAndBind; +import static org.springframework.data.jpa.repository.query.QueryUtils.getQueryString; +import static org.springframework.data.jpa.repository.query.QueryUtils.toOrders; import jakarta.persistence.EntityManager; import jakarta.persistence.LockModeType; @@ -42,7 +47,6 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.StreamSupport; -import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.data.domain.Example; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; @@ -167,8 +171,7 @@ public class SimpleJpaRepository implements JpaRepositoryImplementation new EmptyResultDataAccessException( - String.format("No %s entity with id %s exists", entityInformation.getJavaType(), id), 1))); + findById(id).ifPresent(this::delete); } @Override diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/SimpleJpaRepositoryUnitTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/SimpleJpaRepositoryUnitTests.java index 66291519a..d0ad52aac 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/SimpleJpaRepositoryUnitTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/SimpleJpaRepositoryUnitTests.java @@ -15,10 +15,13 @@ */ package org.springframework.data.jpa.repository.support; -import static java.util.Collections.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; -import static org.springframework.data.jpa.domain.Specification.*; +import static java.util.Collections.singletonMap; +import static org.assertj.core.api.Assertions.assertThatNoException; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.springframework.data.jpa.domain.Specification.where; import jakarta.persistence.EntityGraph; import jakarta.persistence.EntityManager; @@ -38,7 +41,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoSettings; import org.mockito.quality.Strictness; -import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.data.domain.PageRequest; import org.springframework.data.jpa.domain.sample.User; import org.springframework.data.jpa.repository.EntityGraph.EntityGraphType; @@ -51,6 +53,7 @@ import org.springframework.data.repository.CrudRepository; * @author Thomas Darimont * @author Mark Paluch * @author Jens Schauder + * @author Greg Turnquist */ @ExtendWith(MockitoExtension.class) @MockitoSettings(strictness = Strictness.LENIENT) @@ -122,10 +125,10 @@ class SimpleJpaRepositoryUnitTests { verify(countQuery, never()).getSingleResult(); } - @Test // DATAJPA-177 - void throwsExceptionIfEntityToDeleteDoesNotExist() { + @Test // DATAJPA-177, gh-2719 + void doesNotThrowExceptionIfEntityToDeleteDoesNotExist() { - assertThatExceptionOfType(EmptyResultDataAccessException.class).isThrownBy(() -> repo.deleteById(4711)); + assertThatNoException().isThrownBy(() -> repo.deleteById(4711)); } @Test // DATAJPA-689, DATAJPA-696