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 dfb77272d..38ea619fa 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,12 +15,7 @@ */ package org.springframework.data.jpa.repository.support; -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 static org.springframework.data.jpa.repository.query.QueryUtils.*; import jakarta.persistence.EntityManager; import jakarta.persistence.LockModeType; @@ -524,10 +519,12 @@ public class SimpleJpaRepository implements JpaRepositoryImplementation delete = builder.createCriteriaDelete(getDomainClass()); - Predicate predicate = spec.toPredicate(delete.from(getDomainClass()), null, builder); + if (spec != null) { + Predicate predicate = spec.toPredicate(delete.from(getDomainClass()), null, builder); - if (predicate != null) { - delete.where(predicate); + if (predicate != null) { + delete.where(predicate); + } } return this.em.createQuery(delete).executeUpdate(); diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java index 9697e0beb..61fc82a88 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java @@ -609,6 +609,16 @@ class UserRepositoryTests { assertThat(repository.findAll((Specification) null, pageable)).isEqualTo(repository.findAll(pageable)); } + @Test // GH-2796 + void removesAllIfSpecificationIsNull() { + + flushTestUsers(); + + repository.delete((Specification) null); + + assertThat(repository.count()).isEqualTo(0L); + } + @Test void returnsAllAsPageIfNoPageableIsGiven() {