|
32 | 32 | import org.springframework.data.mapping.IdentifierAccessor;
|
33 | 33 | import org.springframework.data.mapping.callback.EntityCallbacks;
|
34 | 34 | import org.springframework.data.relational.core.conversion.AggregateChange;
|
35 |
| -import org.springframework.data.relational.core.conversion.RootAggregateChange; |
36 | 35 | import org.springframework.data.relational.core.conversion.BatchingAggregateChange;
|
37 | 36 | import org.springframework.data.relational.core.conversion.MutableAggregateChange;
|
38 | 37 | import org.springframework.data.relational.core.conversion.RelationalEntityDeleteWriter;
|
39 | 38 | import org.springframework.data.relational.core.conversion.RelationalEntityInsertWriter;
|
40 | 39 | import org.springframework.data.relational.core.conversion.RelationalEntityUpdateWriter;
|
41 | 40 | import org.springframework.data.relational.core.conversion.RelationalEntityVersionUtils;
|
| 41 | +import org.springframework.data.relational.core.conversion.RootAggregateChange; |
42 | 42 | import org.springframework.data.relational.core.mapping.RelationalMappingContext;
|
43 | 43 | import org.springframework.data.relational.core.mapping.RelationalPersistentEntity;
|
44 | 44 | import org.springframework.data.relational.core.mapping.RelationalPersistentProperty;
|
@@ -294,8 +294,7 @@ private <T> T afterExecute(AggregateChange<T> change, T entityAfterExecution) {
|
294 | 294 | return triggerAfterSave(entityAfterExecution, change);
|
295 | 295 | }
|
296 | 296 |
|
297 |
| - private <T> RootAggregateChange<T> beforeExecute(T aggregateRoot, |
298 |
| - Function<T, RootAggregateChange<T>> changeCreator) { |
| 297 | + private <T> RootAggregateChange<T> beforeExecute(T aggregateRoot, Function<T, RootAggregateChange<T>> changeCreator) { |
299 | 298 |
|
300 | 299 | Assert.notNull(aggregateRoot, "Aggregate instance must not be null!");
|
301 | 300 |
|
@@ -337,19 +336,17 @@ private <T> T performSave(T instance, Function<T, RootAggregateChange<T>> change
|
337 | 336 |
|
338 | 337 | private <T> List<T> performSaveAll(Iterable<T> instances) {
|
339 | 338 |
|
340 |
| - Iterator<T> iterator = instances.iterator(); |
341 |
| - T firstInstance = iterator.next(); |
| 339 | + BatchingAggregateChange<T, RootAggregateChange<T>> batchingAggregateChange = null; |
342 | 340 |
|
343 |
| - // noinspection unchecked |
344 |
| - BatchingAggregateChange<T, RootAggregateChange<T>> batchingAggregateChange = // |
345 |
| - BatchingAggregateChange.forSave((Class<T>) ClassUtils.getUserClass(firstInstance)); |
346 |
| - batchingAggregateChange.add(beforeExecute(firstInstance, changeCreatorSelectorForSave(firstInstance))); |
347 |
| - |
348 |
| - while (iterator.hasNext()) { |
349 |
| - T instance = iterator.next(); |
| 341 | + for (T instance : instances) { |
| 342 | + if (batchingAggregateChange == null) { |
| 343 | + batchingAggregateChange = BatchingAggregateChange.forSave((Class<T>) ClassUtils.getUserClass(instance)); |
| 344 | + } |
350 | 345 | batchingAggregateChange.add(beforeExecute(instance, changeCreatorSelectorForSave(instance)));
|
351 | 346 | }
|
352 | 347 |
|
| 348 | + Assert.notNull(batchingAggregateChange, "Iterable in saveAll must not be empty"); |
| 349 | + |
353 | 350 | List<T> instancesAfterExecution = executor.executeSave(batchingAggregateChange);
|
354 | 351 |
|
355 | 352 | ArrayList<T> results = new ArrayList<>(instancesAfterExecution.size());
|
@@ -378,8 +375,7 @@ private <T> RootAggregateChange<T> createUpdateChange(EntityAndPreviousVersion<T
|
378 | 375 |
|
379 | 376 | RootAggregateChange<T> aggregateChange = MutableAggregateChange.forSave(entityAndVersion.entity,
|
380 | 377 | entityAndVersion.version);
|
381 |
| - new RelationalEntityUpdateWriter<T>(context).write(entityAndVersion.entity, |
382 |
| - aggregateChange); |
| 378 | + new RelationalEntityUpdateWriter<T>(context).write(entityAndVersion.entity, aggregateChange); |
383 | 379 | return aggregateChange;
|
384 | 380 | }
|
385 | 381 |
|
|
0 commit comments