3131import org .springframework .data .mapping .IdentifierAccessor ;
3232import org .springframework .data .mapping .callback .EntityCallbacks ;
3333import org .springframework .data .relational .core .conversion .AggregateChange ;
34+ import org .springframework .data .relational .core .conversion .AggregateChangeWithRoot ;
3435import org .springframework .data .relational .core .conversion .MutableAggregateChange ;
3536import org .springframework .data .relational .core .conversion .RelationalEntityDeleteWriter ;
3637import org .springframework .data .relational .core .conversion .RelationalEntityInsertWriter ;
@@ -61,8 +62,6 @@ public class JdbcAggregateTemplate implements JdbcAggregateOperations {
6162 private final RelationalMappingContext context ;
6263
6364 private final RelationalEntityDeleteWriter jdbcEntityDeleteWriter ;
64- private final RelationalEntityInsertWriter jdbcEntityInsertWriter ;
65- private final RelationalEntityUpdateWriter jdbcEntityUpdateWriter ;
6665
6766 private final DataAccessStrategy accessStrategy ;
6867 private final AggregateChangeExecutor executor ;
@@ -92,8 +91,6 @@ public JdbcAggregateTemplate(ApplicationContext publisher, RelationalMappingCont
9291 this .accessStrategy = dataAccessStrategy ;
9392 this .converter = converter ;
9493
95- this .jdbcEntityInsertWriter = new RelationalEntityInsertWriter (context );
96- this .jdbcEntityUpdateWriter = new RelationalEntityUpdateWriter (context );
9794 this .jdbcEntityDeleteWriter = new RelationalEntityDeleteWriter (context );
9895
9996 this .executor = new AggregateChangeExecutor (converter , accessStrategy );
@@ -122,8 +119,6 @@ public JdbcAggregateTemplate(ApplicationEventPublisher publisher, RelationalMapp
122119 this .accessStrategy = dataAccessStrategy ;
123120 this .converter = converter ;
124121
125- this .jdbcEntityInsertWriter = new RelationalEntityInsertWriter (context );
126- this .jdbcEntityUpdateWriter = new RelationalEntityUpdateWriter (context );
127122 this .jdbcEntityDeleteWriter = new RelationalEntityDeleteWriter (context );
128123 this .executor = new AggregateChangeExecutor (converter , accessStrategy );
129124 }
@@ -146,7 +141,7 @@ public <T> T save(T instance) {
146141
147142 RelationalPersistentEntity <?> persistentEntity = context .getRequiredPersistentEntity (instance .getClass ());
148143
149- Function <T , MutableAggregateChange <T >> changeCreator = persistentEntity .isNew (instance )
144+ Function <T , AggregateChangeWithRoot <T >> changeCreator = persistentEntity .isNew (instance )
150145 ? entity -> createInsertChange (prepareVersionForInsert (entity ))
151146 : entity -> createUpdateChange (prepareVersionForUpdate (entity ));
152147
@@ -286,18 +281,18 @@ public void deleteAll(Class<?> domainType) {
286281 executor .execute (change );
287282 }
288283
289- private <T > T store (T aggregateRoot , Function <T , MutableAggregateChange <T >> changeCreator ,
284+ private <T > T store (T aggregateRoot , Function <T , AggregateChangeWithRoot <T >> changeCreator ,
290285 RelationalPersistentEntity <?> persistentEntity ) {
291286
292287 Assert .notNull (aggregateRoot , "Aggregate instance must not be null!" );
293288
294289 aggregateRoot = triggerBeforeConvert (aggregateRoot );
295290
296- MutableAggregateChange <T > change = changeCreator .apply (aggregateRoot );
291+ AggregateChangeWithRoot <T > change = changeCreator .apply (aggregateRoot );
297292
298- aggregateRoot = triggerBeforeSave (change .getEntity (), change );
293+ aggregateRoot = triggerBeforeSave (change .getRoot (), change );
299294
300- change .setEntity (aggregateRoot );
295+ change .setRoot (aggregateRoot );
301296
302297 T entityAfterExecution = executor .execute (change );
303298
@@ -313,25 +308,24 @@ private <T> void deleteTree(Object id, @Nullable T entity, Class<T> domainType)
313308 MutableAggregateChange <T > change = createDeletingChange (id , entity , domainType );
314309
315310 entity = triggerBeforeDelete (entity , id , change );
316- change .setEntity (entity );
317311
318312 executor .execute (change );
319313
320314 triggerAfterDelete (entity , id , change );
321315 }
322316
323- private <T > MutableAggregateChange <T > createInsertChange (T instance ) {
317+ private <T > AggregateChangeWithRoot <T > createInsertChange (T instance ) {
324318
325- MutableAggregateChange <T > aggregateChange = MutableAggregateChange .forSave (instance );
326- jdbcEntityInsertWriter .write (instance , aggregateChange );
319+ AggregateChangeWithRoot <T > aggregateChange = MutableAggregateChange .forSave (instance );
320+ new RelationalEntityInsertWriter < T >( context ) .write (instance , aggregateChange );
327321 return aggregateChange ;
328322 }
329323
330- private <T > MutableAggregateChange <T > createUpdateChange (EntityAndPreviousVersion <T > entityAndVersion ) {
324+ private <T > AggregateChangeWithRoot <T > createUpdateChange (EntityAndPreviousVersion <T > entityAndVersion ) {
331325
332- MutableAggregateChange <T > aggregateChange = MutableAggregateChange .forSave (entityAndVersion .entity ,
326+ AggregateChangeWithRoot <T > aggregateChange = MutableAggregateChange .forSave (entityAndVersion .entity ,
333327 entityAndVersion .version );
334- jdbcEntityUpdateWriter .write (entityAndVersion .entity , aggregateChange );
328+ new RelationalEntityUpdateWriter < T >( context ) .write (entityAndVersion .entity , aggregateChange );
335329 return aggregateChange ;
336330 }
337331
@@ -383,14 +377,14 @@ private <T> MutableAggregateChange<T> createDeletingChange(Object id, @Nullable
383377 previousVersion = RelationalEntityVersionUtils .getVersionNumberFromEntity (entity , persistentEntity , converter );
384378 }
385379 }
386- MutableAggregateChange <T > aggregateChange = MutableAggregateChange .forDelete (domainType , entity , previousVersion );
380+ MutableAggregateChange <T > aggregateChange = MutableAggregateChange .forDelete (domainType , previousVersion );
387381 jdbcEntityDeleteWriter .write (id , aggregateChange );
388382 return aggregateChange ;
389383 }
390384
391385 private MutableAggregateChange <?> createDeletingChange (Class <?> domainType ) {
392386
393- MutableAggregateChange <?> aggregateChange = MutableAggregateChange .forDelete (domainType , null );
387+ MutableAggregateChange <?> aggregateChange = MutableAggregateChange .forDelete (domainType );
394388 jdbcEntityDeleteWriter .write (null , aggregateChange );
395389 return aggregateChange ;
396390 }
0 commit comments