HHH-17167 Add test for issue

This commit is contained in:
Marco Belladelli 2023-09-07 13:51:07 +02:00 committed by Christian Beikov
parent 3eb324f714
commit 3da12cae61
1 changed files with 37 additions and 2 deletions

View File

@ -30,15 +30,21 @@ import static org.assertj.core.api.Assertions.assertThat;
/** /**
* @author Marco Belladelli * @author Marco Belladelli
*/ */
@DomainModel( annotatedClasses = { RowIdUpdateTest.SimpleEntity.class, RowIdUpdateTest.ParentEntity.class } ) @DomainModel( annotatedClasses = {
RowIdUpdateAndDeleteTest.SimpleEntity.class,
RowIdUpdateAndDeleteTest.ParentEntity.class
} )
@SessionFactory( useCollectingStatementInspector = true ) @SessionFactory( useCollectingStatementInspector = true )
@Jira( "https://hibernate.atlassian.net/browse/HHH-17045" ) @Jira( "https://hibernate.atlassian.net/browse/HHH-17045" )
public class RowIdUpdateTest { @Jira( "https://hibernate.atlassian.net/browse/HHH-17167" )
public class RowIdUpdateAndDeleteTest {
@BeforeAll @BeforeAll
public void setUp(SessionFactoryScope scope) { public void setUp(SessionFactoryScope scope) {
scope.inTransaction( session -> { scope.inTransaction( session -> {
session.persist( new SimpleEntity( 1L, "initial_status" ) ); session.persist( new SimpleEntity( 1L, "initial_status" ) );
session.persist( new ParentEntity( 2L, new SimpleEntity( 2L, "initial_status" ) ) ); session.persist( new ParentEntity( 2L, new SimpleEntity( 2L, "initial_status" ) ) );
session.persist( new SimpleEntity( 11L, "to_delete" ) );
session.persist( new ParentEntity( 12L, new SimpleEntity( 12L, "to_delete" ) ) );
} ); } );
} }
@ -68,6 +74,22 @@ public class RowIdUpdateTest {
).isEqualTo( "new_status" ) ); ).isEqualTo( "new_status" ) );
} }
@Test
public void testSimpleDeleteSameTransaction(SessionFactoryScope scope) {
final SQLStatementInspector inspector = scope.getCollectingStatementInspector();
inspector.clear();
scope.inTransaction( session -> {
final SimpleEntity simpleEntity = new SimpleEntity( 13L, "to_delete" );
session.persist( simpleEntity );
session.flush();
session.remove( simpleEntity );
inspector.clear();
} );
// the update should have used the primary key, as the row-id value is not available
checkUpdateQuery( inspector, true );
scope.inTransaction( session -> assertThat( session.find( SimpleEntity.class, 13L ) ).isNull() );
}
@Test @Test
public void testRelatedUpdateSameTransaction(SessionFactoryScope scope) { public void testRelatedUpdateSameTransaction(SessionFactoryScope scope) {
final SQLStatementInspector inspector = scope.getCollectingStatementInspector(); final SQLStatementInspector inspector = scope.getCollectingStatementInspector();
@ -107,6 +129,19 @@ public class RowIdUpdateTest {
).isEqualTo( "new_status" ) ); ).isEqualTo( "new_status" ) );
} }
@Test
public void testSimpleDeleteDifferentTransaction(SessionFactoryScope scope) {
final SQLStatementInspector inspector = scope.getCollectingStatementInspector();
scope.inTransaction( session -> {
final SimpleEntity simpleEntity = session.find( SimpleEntity.class, 11L );
session.remove( simpleEntity );
inspector.clear();
} );
final Dialect dialect = scope.getSessionFactory().getJdbcServices().getDialect();
checkUpdateQuery( inspector, dialect.rowId( "" ) == null );
scope.inTransaction( session -> assertThat( session.find( SimpleEntity.class, 11L ) ).isNull() );
}
@Test @Test
public void testRelatedUpdateRelatedDifferentTransaction(SessionFactoryScope scope) { public void testRelatedUpdateRelatedDifferentTransaction(SessionFactoryScope scope) {
final SQLStatementInspector inspector = scope.getCollectingStatementInspector(); final SQLStatementInspector inspector = scope.getCollectingStatementInspector();