Leniently accept null when calling delete(Specification).

Closes #2796
This commit is contained in:
Mark Paluch
2023-03-21 11:35:53 +01:00
parent 49ab0cfbd8
commit 8d4c40f5cb
2 changed files with 16 additions and 9 deletions

View File

@@ -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<T, ID> implements JpaRepositoryImplementation<T
CriteriaBuilder builder = this.em.getCriteriaBuilder();
CriteriaDelete<T> 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();

View File

@@ -609,6 +609,16 @@ class UserRepositoryTests {
assertThat(repository.findAll((Specification<User>) null, pageable)).isEqualTo(repository.findAll(pageable));
}
@Test // GH-2796
void removesAllIfSpecificationIsNull() {
flushTestUsers();
repository.delete((Specification<User>) null);
assertThat(repository.count()).isEqualTo(0L);
}
@Test
void returnsAllAsPageIfNoPageableIsGiven() {