Skip to content

Commit 8d4c40f

Browse files
committed
Leniently accept null when calling delete(Specification).
Closes #2796
1 parent 49ab0cf commit 8d4c40f

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed

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

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

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;
18+
import static org.springframework.data.jpa.repository.query.QueryUtils.*;
2419

2520
import jakarta.persistence.EntityManager;
2621
import jakarta.persistence.LockModeType;
@@ -524,10 +519,12 @@ public long delete(Specification<T> spec) {
524519
CriteriaBuilder builder = this.em.getCriteriaBuilder();
525520
CriteriaDelete<T> delete = builder.createCriteriaDelete(getDomainClass());
526521

527-
Predicate predicate = spec.toPredicate(delete.from(getDomainClass()), null, builder);
522+
if (spec != null) {
523+
Predicate predicate = spec.toPredicate(delete.from(getDomainClass()), null, builder);
528524

529-
if (predicate != null) {
530-
delete.where(predicate);
525+
if (predicate != null) {
526+
delete.where(predicate);
527+
}
531528
}
532529

533530
return this.em.createQuery(delete).executeUpdate();

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

+10
Original file line numberDiff line numberDiff line change
@@ -609,6 +609,16 @@ void returnsSamePageIfNoSpecGiven() {
609609
assertThat(repository.findAll((Specification<User>) null, pageable)).isEqualTo(repository.findAll(pageable));
610610
}
611611

612+
@Test // GH-2796
613+
void removesAllIfSpecificationIsNull() {
614+
615+
flushTestUsers();
616+
617+
repository.delete((Specification<User>) null);
618+
619+
assertThat(repository.count()).isEqualTo(0L);
620+
}
621+
612622
@Test
613623
void returnsAllAsPageIfNoPageableIsGiven() {
614624

0 commit comments

Comments
 (0)