From e325c0152b68120a736e9423524eaccc8b395506 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Tue, 3 Jan 2023 09:34:15 +0100 Subject: [PATCH] Allow empty Iterable arguments in JdbcAggregateTemplate again. This also affects repositories since they delegate to the template. Closes #1401 --- .../data/jdbc/core/JdbcAggregateTemplate.java | 24 ++++++++++++++---- .../core/JdbcAggregateTemplateUnitTests.java | 25 +++++++++++++++++++ 2 files changed, 44 insertions(+), 5 deletions(-) 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 {