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
This commit is contained in:
Greg L. Turnquist
2022-12-05 11:47:14 -06:00
parent a95d25aa8b
commit f40b39c3ec
2 changed files with 18 additions and 12 deletions

View File

@@ -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<T, ID> implements JpaRepositoryImplementation<T
Assert.notNull(id, ID_MUST_NOT_BE_NULL);
delete(findById(id).orElseThrow(() -> new EmptyResultDataAccessException(
String.format("No %s entity with id %s exists", entityInformation.getJavaType(), id), 1)));
findById(id).ifPresent(this::delete);
}
@Override

View File

@@ -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