@ -748,28 +748,28 @@ public class JdbcAggregateTemplateIntegrationTests {
@@ -748,28 +748,28 @@ public class JdbcAggregateTemplateIntegrationTests {
AggregateWithImmutableVersion aggregate = new AggregateWithImmutableVersion ( null , null ) ;
aggregate = template . save ( aggregate ) ;
assertThat ( aggregate . version ) . isEqualTo ( 1 L) ;
assertThat ( aggregate . version ) . isEqualTo ( 0 L) ;
Long id = aggregate . getId ( ) ;
AggregateWithImmutableVersion reloadedAggregate = template . findById ( id , aggregate . getClass ( ) ) ;
assertThat ( reloadedAggregate . getVersion ( ) ) . describedAs ( "version field should initially have the value 1 " )
. isEqualTo ( 1 L) ;
assertThat ( reloadedAggregate . getVersion ( ) ) . describedAs ( "version field should initially have the value 0 " )
. isEqualTo ( 0 L) ;
AggregateWithImmutableVersion savedAgain = template . save ( reloadedAggregate ) ;
AggregateWithImmutableVersion reloadedAgain = template . findById ( id , aggregate . getClass ( ) ) ;
assertThat ( savedAgain . version ) . describedAs ( "The object returned by save should have an increased version" )
. isEqualTo ( 2 L) ;
. isEqualTo ( 1 L) ;
assertThat ( reloadedAgain . getVersion ( ) ) . describedAs ( "version field should increment by one with each save" )
. isEqualTo ( 2 L) ;
. isEqualTo ( 1 L) ;
assertThatThrownBy ( ( ) - > template . save ( new AggregateWithImmutableVersion ( id , 1 L) ) )
assertThatThrownBy ( ( ) - > template . save ( new AggregateWithImmutableVersion ( id , 0 L) ) )
. describedAs ( "saving an aggregate with an outdated version should raise an exception" )
. hasRootCauseInstanceOf ( OptimisticLockingFailureException . class ) ;
assertThatThrownBy ( ( ) - > template . save ( new AggregateWithImmutableVersion ( id , 3 L) ) )
assertThatThrownBy ( ( ) - > template . save ( new AggregateWithImmutableVersion ( id , 2 L) ) )
. describedAs ( "saving an aggregate with a future version should raise an exception" )
. hasRootCauseInstanceOf ( OptimisticLockingFailureException . class ) ;
}
@ -779,6 +779,8 @@ public class JdbcAggregateTemplateIntegrationTests {
@@ -779,6 +779,8 @@ public class JdbcAggregateTemplateIntegrationTests {
AggregateWithImmutableVersion aggregate = new AggregateWithImmutableVersion ( null , null ) ;
aggregate = template . save ( aggregate ) ;
// as non-primitive versions start from 0, we need to save one more time to make version equal 1
aggregate = template . save ( aggregate ) ;
// Should have an ID and a version of 1.
final Long id = aggregate . getId ( ) ;
@ -789,7 +791,7 @@ public class JdbcAggregateTemplateIntegrationTests {
@@ -789,7 +791,7 @@ public class JdbcAggregateTemplateIntegrationTests {
. hasRootCauseInstanceOf ( OptimisticLockingFailureException . class ) ;
assertThatThrownBy (
( ) - > template . delete ( new AggregateWithImmutableVersion ( id , 3 L) , AggregateWithImmutableVersion . class ) )
( ) - > template . delete ( new AggregateWithImmutableVersion ( id , 2 L) , AggregateWithImmutableVersion . class ) )
. describedAs ( "deleting an aggregate with a future version should raise an exception" )
. hasRootCauseInstanceOf ( OptimisticLockingFailureException . class ) ;
@ -811,7 +813,7 @@ public class JdbcAggregateTemplateIntegrationTests {
@@ -811,7 +813,7 @@ public class JdbcAggregateTemplateIntegrationTests {
@Test // DATAJDBC-219
public void saveAndUpdateAggregateWithPrimitiveLongVersion ( ) {
saveAndUpdateAggregateWithVersion ( new AggregateWithPrimitiveLongVersion ( ) , Number : : longValue ) ;
saveAndUpdateAggregateWithPrimitive Version ( new AggregateWithPrimitiveLongVersion ( ) , Number : : longValue ) ;
}
@Test // DATAJDBC-219
@ -821,7 +823,7 @@ public class JdbcAggregateTemplateIntegrationTests {
@@ -821,7 +823,7 @@ public class JdbcAggregateTemplateIntegrationTests {
@Test // DATAJDBC-219
public void saveAndUpdateAggregateWithPrimitiveIntegerVersion ( ) {
saveAndUpdateAggregateWithVersion ( new AggregateWithPrimitiveIntegerVersion ( ) , Number : : intValue ) ;
saveAndUpdateAggregateWithPrimitive Version ( new AggregateWithPrimitiveIntegerVersion ( ) , Number : : intValue ) ;
}
@Test // DATAJDBC-219
@ -831,7 +833,7 @@ public class JdbcAggregateTemplateIntegrationTests {
@@ -831,7 +833,7 @@ public class JdbcAggregateTemplateIntegrationTests {
@Test // DATAJDBC-219
public void saveAndUpdateAggregateWithPrimitiveShortVersion ( ) {
saveAndUpdateAggregateWithVersion ( new AggregateWithPrimitiveShortVersion ( ) , Number : : shortValue ) ;
saveAndUpdateAggregateWithPrimitive Version ( new AggregateWithPrimitiveShortVersion ( ) , Number : : shortValue ) ;
}
@Test // DATAJDBC-462
@ -845,6 +847,31 @@ public class JdbcAggregateTemplateIntegrationTests {
@@ -845,6 +847,31 @@ public class JdbcAggregateTemplateIntegrationTests {
}
private < T extends Number > void saveAndUpdateAggregateWithVersion ( VersionedAggregate aggregate ,
Function < Number , T > toConcreteNumber ) {
template . save ( aggregate ) ;
VersionedAggregate reloadedAggregate = template . findById ( aggregate . getId ( ) , aggregate . getClass ( ) ) ;
assertThat ( reloadedAggregate . getVersion ( ) ) . isEqualTo ( toConcreteNumber . apply ( 0 ) )
. withFailMessage ( "version field should initially have the value 0" ) ;
template . save ( reloadedAggregate ) ;
VersionedAggregate updatedAggregate = template . findById ( aggregate . getId ( ) , aggregate . getClass ( ) ) ;
assertThat ( updatedAggregate . getVersion ( ) ) . isEqualTo ( toConcreteNumber . apply ( 1 ) )
. withFailMessage ( "version field should increment by one with each save" ) ;
reloadedAggregate . setVersion ( toConcreteNumber . apply ( 0 ) ) ;
assertThatThrownBy ( ( ) - > template . save ( reloadedAggregate ) )
. hasRootCauseInstanceOf ( OptimisticLockingFailureException . class )
. withFailMessage ( "saving an aggregate with an outdated version should raise an exception" ) ;
reloadedAggregate . setVersion ( toConcreteNumber . apply ( 2 ) ) ;
assertThatThrownBy ( ( ) - > template . save ( reloadedAggregate ) )
. hasRootCauseInstanceOf ( OptimisticLockingFailureException . class )
. withFailMessage ( "saving an aggregate with a future version should raise an exception" ) ;
}
private < T extends Number > void saveAndUpdateAggregateWithPrimitiveVersion ( VersionedAggregate aggregate ,
Function < Number , T > toConcreteNumber ) {
template . save ( aggregate ) ;