@@ -164,15 +164,19 @@ public <T> T save(T instance) {
164164
165165 Assert .notNull (instance , "Aggregate instance must not be null" );
166166
167- return performSave (instance , changeCreatorSelectorForSave (instance ));
167+ return performSave (new EntityAndChangeCreator <>( instance , changeCreatorSelectorForSave (instance ) ));
168168 }
169169
170170 @ Override
171171 public <T > Iterable <T > saveAll (Iterable <T > instances ) {
172172
173173 Assert .isTrue (instances .iterator ().hasNext (), "Aggregate instances must not be empty" );
174174
175- return performSaveAll (instances );
175+ List <EntityAndChangeCreator <T >> entityAndChangeCreators = new ArrayList <>();
176+ for (T instance : instances ) {
177+ entityAndChangeCreators .add (new EntityAndChangeCreator <>(instance , changeCreatorSelectorForSave (instance )));
178+ }
179+ return performSaveAll (entityAndChangeCreators );
176180 }
177181
178182 /**
@@ -187,7 +191,21 @@ public <T> T insert(T instance) {
187191
188192 Assert .notNull (instance , "Aggregate instance must not be null" );
189193
190- return performSave (instance , entity -> createInsertChange (prepareVersionForInsert (entity )));
194+ return performSave (new EntityAndChangeCreator <>(
195+ instance , entity -> createInsertChange (prepareVersionForInsert (entity ))));
196+ }
197+
198+ @ Override
199+ public <T > Iterable <T > insertAll (Iterable <T > instances ) {
200+
201+ Assert .isTrue (instances .iterator ().hasNext (), "Aggregate instances must not be empty" );
202+
203+ List <EntityAndChangeCreator <T >> entityAndChangeCreators = new ArrayList <>();
204+ for (T instance : instances ) {
205+ entityAndChangeCreators .add (new EntityAndChangeCreator <>(
206+ instance , entity -> createInsertChange (prepareVersionForInsert (entity ))));
207+ }
208+ return performSaveAll (entityAndChangeCreators );
191209 }
192210
193211 /**
@@ -202,7 +220,21 @@ public <T> T update(T instance) {
202220
203221 Assert .notNull (instance , "Aggregate instance must not be null" );
204222
205- return performSave (instance , entity -> createUpdateChange (prepareVersionForUpdate (entity )));
223+ return performSave (new EntityAndChangeCreator <>(
224+ instance , entity -> createUpdateChange (prepareVersionForUpdate (entity ))));
225+ }
226+
227+ @ Override
228+ public <T > Iterable <T > updateAll (Iterable <T > instances ) {
229+
230+ Assert .isTrue (instances .iterator ().hasNext (), "Aggregate instances must not be empty" );
231+
232+ List <EntityAndChangeCreator <T >> entityAndChangeCreators = new ArrayList <>();
233+ for (T instance : instances ) {
234+ entityAndChangeCreators .add (new EntityAndChangeCreator <>(
235+ instance , entity -> createUpdateChange (prepareVersionForUpdate (entity ))));
236+ }
237+ return performSaveAll (entityAndChangeCreators );
206238 }
207239
208240 @ Override
@@ -401,13 +433,13 @@ private <T> T afterExecute(AggregateChange<T> change, T entityAfterExecution) {
401433 return triggerAfterSave (entityAfterExecution , change );
402434 }
403435
404- private <T > RootAggregateChange <T > beforeExecute (T aggregateRoot , Function < T , RootAggregateChange < T >> changeCreator ) {
436+ private <T > RootAggregateChange <T > beforeExecute (EntityAndChangeCreator < T > instance ) {
405437
406- Assert .notNull (aggregateRoot , "Aggregate instance must not be null" );
438+ Assert .notNull (instance . entity , "Aggregate instance must not be null" );
407439
408- aggregateRoot = triggerBeforeConvert (aggregateRoot );
440+ T aggregateRoot = triggerBeforeConvert (instance . entity );
409441
410- RootAggregateChange <T > change = changeCreator .apply (aggregateRoot );
442+ RootAggregateChange <T > change = instance . changeCreator .apply (aggregateRoot );
411443
412444 aggregateRoot = triggerBeforeSave (change .getRoot (), change );
413445
@@ -427,12 +459,12 @@ private <T> void deleteTree(Object id, @Nullable T entity, Class<T> domainType)
427459 triggerAfterDelete (entity , id , change );
428460 }
429461
430- private <T > T performSave (T instance , Function < T , RootAggregateChange < T >> changeCreator ) {
462+ private <T > T performSave (EntityAndChangeCreator < T > instance ) {
431463
432464 // noinspection unchecked
433465 BatchingAggregateChange <T , RootAggregateChange <T >> batchingAggregateChange = //
434- BatchingAggregateChange .forSave ((Class <T >) ClassUtils .getUserClass (instance ));
435- batchingAggregateChange .add (beforeExecute (instance , changeCreator ));
466+ BatchingAggregateChange .forSave ((Class <T >) ClassUtils .getUserClass (instance . entity ));
467+ batchingAggregateChange .add (beforeExecute (instance ));
436468
437469 Iterator <T > afterExecutionIterator = executor .executeSave (batchingAggregateChange ).iterator ();
438470
@@ -441,16 +473,16 @@ private <T> T performSave(T instance, Function<T, RootAggregateChange<T>> change
441473 return afterExecute (batchingAggregateChange , afterExecutionIterator .next ());
442474 }
443475
444- private <T > List <T > performSaveAll (Iterable <T > instances ) {
445-
476+ private <T > List <T > performSaveAll (Iterable <EntityAndChangeCreator <T >> instances ) {
446477 BatchingAggregateChange <T , RootAggregateChange <T >> batchingAggregateChange = null ;
447478
448- for (T instance : instances ) {
479+ for (EntityAndChangeCreator < T > instance : instances ) {
449480 if (batchingAggregateChange == null ) {
450481 // noinspection unchecked
451- batchingAggregateChange = BatchingAggregateChange .forSave ((Class <T >) ClassUtils .getUserClass (instance ));
482+ batchingAggregateChange = BatchingAggregateChange .forSave (
483+ (Class <T >) ClassUtils .getUserClass (instance .entity ));
452484 }
453- batchingAggregateChange .add (beforeExecute (instance , changeCreatorSelectorForSave ( instance ) ));
485+ batchingAggregateChange .add (beforeExecute (instance ));
454486 }
455487
456488 Assert .notNull (batchingAggregateChange , "Iterable in saveAll must not be empty" );
@@ -604,4 +636,7 @@ private <T> T triggerBeforeDelete(@Nullable T aggregateRoot, Object id, MutableA
604636
605637 private record EntityAndPreviousVersion <T > (T entity , @ Nullable Number version ) {
606638 }
639+
640+ private record EntityAndChangeCreator <T > (T entity , Function <T , RootAggregateChange <T >> changeCreator ) {
641+ }
607642}
0 commit comments