@@ -146,8 +146,9 @@ public <T> T save(T instance) {
146
146
147
147
RelationalPersistentEntity <?> persistentEntity = context .getRequiredPersistentEntity (instance .getClass ());
148
148
149
- Function <T , MutableAggregateChange <T >> changeCreator = persistentEntity .isNew (instance ) ? this ::createInsertChange
150
- : this ::createUpdateChange ;
149
+ Function <T , MutableAggregateChange <T >> changeCreator = persistentEntity .isNew (instance )
150
+ ? entity -> createInsertChange (prepareVersionForInsert (entity ))
151
+ : entity -> createUpdateChange (prepareVersionForUpdate (entity ));
151
152
152
153
return store (instance , changeCreator , persistentEntity );
153
154
}
@@ -166,7 +167,7 @@ public <T> T insert(T instance) {
166
167
167
168
RelationalPersistentEntity <?> persistentEntity = context .getRequiredPersistentEntity (instance .getClass ());
168
169
169
- return store (instance , this :: createInsertChange , persistentEntity );
170
+ return store (instance , entity -> createInsertChange ( prepareVersionForInsert ( entity )) , persistentEntity );
170
171
}
171
172
172
173
/**
@@ -183,7 +184,7 @@ public <T> T update(T instance) {
183
184
184
185
RelationalPersistentEntity <?> persistentEntity = context .getRequiredPersistentEntity (instance .getClass ());
185
186
186
- return store (instance , this :: createUpdateChange , persistentEntity );
187
+ return store (instance , entity -> createUpdateChange ( prepareVersionForUpdate ( entity )) , persistentEntity );
187
188
}
188
189
189
190
@ Override
@@ -321,6 +322,21 @@ private <T> void deleteTree(Object id, @Nullable T entity, Class<T> domainType)
321
322
322
323
private <T > MutableAggregateChange <T > createInsertChange (T instance ) {
323
324
325
+ MutableAggregateChange <T > aggregateChange = MutableAggregateChange .forSave (instance );
326
+ jdbcEntityInsertWriter .write (instance , aggregateChange );
327
+ return aggregateChange ;
328
+ }
329
+
330
+ private <T > MutableAggregateChange <T > createUpdateChange (EntityAndPreviousVersion <T > entityAndVersion ) {
331
+
332
+ MutableAggregateChange <T > aggregateChange = MutableAggregateChange .forSave (entityAndVersion .entity ,
333
+ entityAndVersion .version );
334
+ jdbcEntityUpdateWriter .write (entityAndVersion .entity , aggregateChange );
335
+ return aggregateChange ;
336
+ }
337
+
338
+ private <T > T prepareVersionForInsert (T instance ) {
339
+
324
340
RelationalPersistentEntity <T > persistentEntity = getRequiredPersistentEntity (instance );
325
341
T preparedInstance = instance ;
326
342
if (persistentEntity .hasVersionProperty ()) {
@@ -331,31 +347,26 @@ private <T> MutableAggregateChange<T> createInsertChange(T instance) {
331
347
preparedInstance = RelationalEntityVersionUtils .setVersionNumberOnEntity ( //
332
348
instance , initialVersion , persistentEntity , converter );
333
349
}
334
- MutableAggregateChange <T > aggregateChange = MutableAggregateChange .forSave (preparedInstance );
335
- jdbcEntityInsertWriter .write (preparedInstance , aggregateChange );
336
- return aggregateChange ;
350
+ return preparedInstance ;
337
351
}
338
352
339
- private <T > MutableAggregateChange <T > createUpdateChange (T instance ) {
353
+ private <T > EntityAndPreviousVersion <T > prepareVersionForUpdate (T instance ) {
340
354
341
355
RelationalPersistentEntity <T > persistentEntity = getRequiredPersistentEntity (instance );
342
356
T preparedInstance = instance ;
343
357
Number previousVersion = null ;
344
358
if (persistentEntity .hasVersionProperty ()) {
345
359
// If the root aggregate has a version property, increment it.
346
- previousVersion = RelationalEntityVersionUtils .getVersionNumberFromEntity (instance ,
347
- persistentEntity , converter );
360
+ previousVersion = RelationalEntityVersionUtils .getVersionNumberFromEntity (instance , persistentEntity , converter );
348
361
349
362
Assert .notNull (previousVersion , "The root aggregate cannot be updated because the version property is null." );
350
363
351
364
long newVersion = previousVersion .longValue () + 1 ;
352
365
353
- preparedInstance = RelationalEntityVersionUtils .setVersionNumberOnEntity (instance , newVersion ,
354
- persistentEntity , converter );
366
+ preparedInstance = RelationalEntityVersionUtils .setVersionNumberOnEntity (instance , newVersion , persistentEntity ,
367
+ converter );
355
368
}
356
- MutableAggregateChange <T > aggregateChange = MutableAggregateChange .forSave (preparedInstance , previousVersion );
357
- jdbcEntityUpdateWriter .write (preparedInstance , aggregateChange );
358
- return aggregateChange ;
369
+ return new EntityAndPreviousVersion <>(preparedInstance , previousVersion );
359
370
}
360
371
361
372
@ SuppressWarnings ("unchecked" )
@@ -445,4 +456,16 @@ private <T> T triggerBeforeDelete(@Nullable T aggregateRoot, Object id, MutableA
445
456
446
457
return null ;
447
458
}
459
+
460
+ private static class EntityAndPreviousVersion <T > {
461
+
462
+ private final T entity ;
463
+ private final Number version ;
464
+
465
+ EntityAndPreviousVersion (T entity , @ Nullable Number version ) {
466
+
467
+ this .entity = entity ;
468
+ this .version = version ;
469
+ }
470
+ }
448
471
}
0 commit comments