Skip to content

Commit f40b39c

Browse files
committed
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: spring-projects/spring-data-commons#2651
1 parent a95d25a commit f40b39c

File tree

2 files changed

+18
-12
lines changed

2 files changed

+18
-12
lines changed

spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java

+7-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@
1515
*/
1616
package org.springframework.data.jpa.repository.support;
1717

18-
import static org.springframework.data.jpa.repository.query.QueryUtils.*;
18+
import static org.springframework.data.jpa.repository.query.QueryUtils.COUNT_QUERY_STRING;
19+
import static org.springframework.data.jpa.repository.query.QueryUtils.DELETE_ALL_QUERY_BY_ID_STRING;
20+
import static org.springframework.data.jpa.repository.query.QueryUtils.DELETE_ALL_QUERY_STRING;
21+
import static org.springframework.data.jpa.repository.query.QueryUtils.applyAndBind;
22+
import static org.springframework.data.jpa.repository.query.QueryUtils.getQueryString;
23+
import static org.springframework.data.jpa.repository.query.QueryUtils.toOrders;
1924

2025
import jakarta.persistence.EntityManager;
2126
import jakarta.persistence.LockModeType;
@@ -42,7 +47,6 @@
4247
import java.util.stream.Collectors;
4348
import java.util.stream.StreamSupport;
4449

45-
import org.springframework.dao.EmptyResultDataAccessException;
4650
import org.springframework.data.domain.Example;
4751
import org.springframework.data.domain.Page;
4852
import org.springframework.data.domain.PageImpl;
@@ -167,8 +171,7 @@ public void deleteById(ID id) {
167171

168172
Assert.notNull(id, ID_MUST_NOT_BE_NULL);
169173

170-
delete(findById(id).orElseThrow(() -> new EmptyResultDataAccessException(
171-
String.format("No %s entity with id %s exists", entityInformation.getJavaType(), id), 1)));
174+
findById(id).ifPresent(this::delete);
172175
}
173176

174177
@Override

spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/SimpleJpaRepositoryUnitTests.java

+11-8
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,13 @@
1515
*/
1616
package org.springframework.data.jpa.repository.support;
1717

18-
import static java.util.Collections.*;
19-
import static org.assertj.core.api.Assertions.*;
20-
import static org.mockito.Mockito.*;
21-
import static org.springframework.data.jpa.domain.Specification.*;
18+
import static java.util.Collections.singletonMap;
19+
import static org.assertj.core.api.Assertions.assertThatNoException;
20+
import static org.mockito.Mockito.any;
21+
import static org.mockito.Mockito.never;
22+
import static org.mockito.Mockito.verify;
23+
import static org.mockito.Mockito.when;
24+
import static org.springframework.data.jpa.domain.Specification.where;
2225

2326
import jakarta.persistence.EntityGraph;
2427
import jakarta.persistence.EntityManager;
@@ -38,7 +41,6 @@
3841
import org.mockito.junit.jupiter.MockitoExtension;
3942
import org.mockito.junit.jupiter.MockitoSettings;
4043
import org.mockito.quality.Strictness;
41-
import org.springframework.dao.EmptyResultDataAccessException;
4244
import org.springframework.data.domain.PageRequest;
4345
import org.springframework.data.jpa.domain.sample.User;
4446
import org.springframework.data.jpa.repository.EntityGraph.EntityGraphType;
@@ -51,6 +53,7 @@
5153
* @author Thomas Darimont
5254
* @author Mark Paluch
5355
* @author Jens Schauder
56+
* @author Greg Turnquist
5457
*/
5558
@ExtendWith(MockitoExtension.class)
5659
@MockitoSettings(strictness = Strictness.LENIENT)
@@ -122,10 +125,10 @@ void doesNotRetrieveCountWithOffsetAndResultsWithinPageSize() {
122125
verify(countQuery, never()).getSingleResult();
123126
}
124127

125-
@Test // DATAJPA-177
126-
void throwsExceptionIfEntityToDeleteDoesNotExist() {
128+
@Test // DATAJPA-177, gh-2719
129+
void doesNotThrowExceptionIfEntityToDeleteDoesNotExist() {
127130

128-
assertThatExceptionOfType(EmptyResultDataAccessException.class).isThrownBy(() -> repo.deleteById(4711));
131+
assertThatNoException().isThrownBy(() -> repo.deleteById(4711));
129132
}
130133

131134
@Test // DATAJPA-689, DATAJPA-696

0 commit comments

Comments
 (0)