diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateTemplate.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateTemplate.java index bcc76c2d..cb0e66ac 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateTemplate.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateTemplate.java @@ -16,6 +16,7 @@ package org.springframework.data.jdbc.core; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -170,7 +171,11 @@ public class JdbcAggregateTemplate implements JdbcAggregateOperations { @Override public Iterable saveAll(Iterable instances) { - Assert.isTrue(instances.iterator().hasNext(), "Aggregate instances must not be empty"); + Assert.notNull(instances, "Aggregate instances must not be null"); + + if (!instances.iterator().hasNext()) { + return Collections.emptyList(); + } return performSaveAll(instances); } @@ -327,7 +332,9 @@ public class JdbcAggregateTemplate implements JdbcAggregateOperations { @Override public void deleteAllById(Iterable ids, Class domainType) { - Assert.isTrue(ids.iterator().hasNext(), "Ids must not be empty"); + if (!ids.iterator().hasNext()) { + return; + } BatchingAggregateChange> batchingAggregateChange = BatchingAggregateChange .forDelete(domainType); @@ -356,7 +363,9 @@ public class JdbcAggregateTemplate implements JdbcAggregateOperations { @Override public void deleteAll(Iterable instances) { - Assert.isTrue(instances.iterator().hasNext(), "Aggregate instances must not be empty"); + if (!instances.iterator().hasNext()) { + return; + } Map> groupedByType = new HashMap<>(); diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateUnitTests.java index 7d3565f1..ec6758de 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateUnitTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateUnitTests.java @@ -312,6 +312,21 @@ public class JdbcAggregateTemplateUnitTests { assertThat(all).containsExactly(alfred2, neumann2); } + @Test // GH-1401 + public void saveAllWithEmptyListDoesNothing() { + assertThat(template.saveAll(emptyList())).isEmpty(); + } + + @Test // GH-1401 + public void deleteAllWithEmptyListDoesNothing() { + template.deleteAll(emptyList()); + } + + @Test // GH-1401 + public void deleteAllByIdWithEmptyListDoesNothing() { + template.deleteAllById(emptyList(), SampleEntity.class); + } + @Data @AllArgsConstructor private static class SampleEntity {