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 60c42425..12dff4a4 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; @@ -171,7 +172,10 @@ public class JdbcAggregateTemplate implements JdbcAggregateOperations { public Iterable saveAll(Iterable instances) { Assert.notNull(instances, "Aggregate instances must not be null"); - Assert.isTrue(instances.iterator().hasNext(), "Aggregate instances must not be empty"); + + if (!instances.iterator().hasNext()) { + return Collections.emptyList(); + } List> entityAndChangeCreators = new ArrayList<>(); for (T instance : instances) { @@ -200,7 +204,10 @@ public class JdbcAggregateTemplate implements JdbcAggregateOperations { public Iterable insertAll(Iterable instances) { Assert.notNull(instances, "Aggregate instances must not be null"); - Assert.isTrue(instances.iterator().hasNext(), "Aggregate instances must not be empty"); + + if (!instances.iterator().hasNext()) { + return Collections.emptyList(); + } List> entityAndChangeCreators = new ArrayList<>(); for (T instance : instances) { @@ -232,7 +239,10 @@ public class JdbcAggregateTemplate implements JdbcAggregateOperations { public Iterable updateAll(Iterable instances) { Assert.notNull(instances, "Aggregate instances must not be null"); - Assert.isTrue(instances.iterator().hasNext(), "Aggregate instances must not be empty"); + + if (!instances.iterator().hasNext()) { + return Collections.emptyList(); + } List> entityAndChangeCreators = new ArrayList<>(); for (T instance : instances) { @@ -366,7 +376,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); @@ -395,7 +407,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..2717bacb 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,31 @@ public class JdbcAggregateTemplateUnitTests { assertThat(all).containsExactly(alfred2, neumann2); } + @Test // GH-1401 + public void saveAllWithEmptyListDoesNothing() { + assertThat(template.saveAll(emptyList())).isEmpty(); + } + + @Test // GH-1401 + public void insertAllWithEmptyListDoesNothing() { + assertThat(template.insertAll(emptyList())).isEmpty(); + } + + @Test // GH-1401 + public void updateAllWithEmptyListDoesNothing() { + assertThat(template.updateAll(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 {