From 887e12f5e72df35501445672cb4e3c9551ebf574 Mon Sep 17 00:00:00 2001 From: Gavin King Date: Fri, 10 Oct 2025 11:13:35 +0200 Subject: [PATCH] make ModelMutationLogging typesafe --- .../engine/jdbc/batch/internal/BatchImpl.java | 7 +- .../internal/AbstractMutationExecutor.java | 5 +- .../AbstractCollectionPersister.java | 10 +- .../AbstractUpdateRowsCoordinator.java | 4 +- .../DeleteRowsCoordinatorStandard.java | 11 +- ...DeleteRowsCoordinatorTablePerSubclass.java | 11 +- .../InsertRowsCoordinatorStandard.java | 15 +- ...InsertRowsCoordinatorTablePerSubclass.java | 25 +--- .../mutation/RemoveCoordinatorStandard.java | 6 +- .../RemoveCoordinatorTablePerSubclass.java | 6 +- .../entity/AbstractEntityPersister.java | 16 +- .../mutation/AbstractMutationCoordinator.java | 6 +- .../sql/model/ModelMutationLogging.java | 137 +++++++++++++++++- .../model/jdbc/DeleteOrUpsertOperation.java | 8 +- .../jdbc/OptionalTableUpdateOperation.java | 7 +- 15 files changed, 177 insertions(+), 97 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchImpl.java index e4d3e02b9257..bb6ce470199a 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchImpl.java @@ -115,14 +115,17 @@ public void addToBatch(JdbcValueBindings jdbcValueBindings, TableInclusionChecke if ( inclusionChecker != null && !inclusionChecker.include( statementDetails.getMutatingTableDetails() ) ) { if ( loggerTraceEnabled ) { - MODEL_MUTATION_LOGGER.tracef( - "Skipping addBatch for table: %s (batch position %s)", + MODEL_MUTATION_LOGGER.skippingAddBatchForTable( statementDetails.getMutatingTableDetails().getTableName(), batchPosition+1 ); } } else { + MODEL_MUTATION_LOGGER.addBatchForTable( + statementDetails.getMutatingTableDetails().getTableName(), + batchPosition+1 + ); //noinspection resource final var statement = statementDetails.resolveStatement(); final String sqlString = statementDetails.getSqlString(); diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/mutation/internal/AbstractMutationExecutor.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/mutation/internal/AbstractMutationExecutor.java index 384a8bd1a3e9..b73fc23a67c8 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/mutation/internal/AbstractMutationExecutor.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/mutation/internal/AbstractMutationExecutor.java @@ -115,10 +115,7 @@ protected void performNonBatchedMutation( final TableMapping tableDetails = statementDetails.getMutatingTableDetails(); if ( inclusionChecker != null && !inclusionChecker.include( tableDetails ) ) { if ( MODEL_MUTATION_LOGGER.isTraceEnabled() ) { - MODEL_MUTATION_LOGGER.tracef( - "Skipping execution of secondary insert: %s", - tableDetails.getTableName() - ); + MODEL_MUTATION_LOGGER.skippingSecondaryInsert( tableDetails.getTableName() ); } return; } diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java index 34490de9fd59..60620859af48 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java @@ -724,31 +724,31 @@ private NamedQueryMemento getNamedQueryMemento(MetadataImplementor bootModel) protected void logStaticSQL() { if ( MODEL_MUTATION_LOGGER.isTraceEnabled() ) { - MODEL_MUTATION_LOGGER.tracef( "Static SQL for collection: %s", getRole() ); + MODEL_MUTATION_LOGGER.staticSqlForCollection( getRole() ); final var rowMutationOperations = getRowMutationOperations(); final var insertRowOperation = rowMutationOperations.getInsertRowOperation(); final String insertRowSql = insertRowOperation != null ? insertRowOperation.getSqlString() : null; if ( insertRowSql != null ) { - MODEL_MUTATION_LOGGER.tracef( " Row insert: %s", insertRowSql ); + MODEL_MUTATION_LOGGER.collectionRowInsert( insertRowSql ); } final var updateRowOperation = rowMutationOperations.getUpdateRowOperation(); final String updateRowSql = updateRowOperation != null ? updateRowOperation.getSqlString() : null; if ( updateRowSql != null ) { - MODEL_MUTATION_LOGGER.tracef( " Row update: %s", updateRowSql ); + MODEL_MUTATION_LOGGER.collectionRowUpdate( updateRowSql ); } final var deleteRowOperation = rowMutationOperations.getDeleteRowOperation(); final String deleteRowSql = deleteRowOperation != null ? deleteRowOperation.getSqlString() : null; if ( deleteRowSql != null ) { - MODEL_MUTATION_LOGGER.tracef( " Row delete: %s", deleteRowSql ); + MODEL_MUTATION_LOGGER.collectionRowDelete( deleteRowSql ); } final String deleteAllSql = getRemoveCoordinator().getSqlString(); if ( deleteAllSql != null ) { - MODEL_MUTATION_LOGGER.tracef( " One-shot delete: %s", deleteAllSql ); + MODEL_MUTATION_LOGGER.collectionOneShotDelete( deleteAllSql ); } } } diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/AbstractUpdateRowsCoordinator.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/AbstractUpdateRowsCoordinator.java index b3727a815d40..620a6ab9cfc8 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/AbstractUpdateRowsCoordinator.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/AbstractUpdateRowsCoordinator.java @@ -41,12 +41,12 @@ public CollectionMutationTarget getMutationTarget() { @Override public void updateRows(Object key, PersistentCollection collection, SharedSessionContractImplementor session) { - MODEL_MUTATION_LOGGER.tracef( "Updating collection rows - %s#%s", mutationTarget.getRolePath(), key ); + MODEL_MUTATION_LOGGER.updatingCollectionRows( mutationTarget.getRolePath(), key ); // update all the modified entries int count = doUpdate( key, collection, session ); - MODEL_MUTATION_LOGGER.tracef( "Updated %s collection rows - %s#%s", count, mutationTarget.getRolePath(), key ); + MODEL_MUTATION_LOGGER.updatedCollectionRows( count, mutationTarget.getRolePath(), key ); } protected abstract int doUpdate(Object key, PersistentCollection collection, SharedSessionContractImplementor session); diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/DeleteRowsCoordinatorStandard.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/DeleteRowsCoordinatorStandard.java index 37aed66af72a..d84968ee5f19 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/DeleteRowsCoordinatorStandard.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/DeleteRowsCoordinatorStandard.java @@ -60,11 +60,7 @@ public void deleteRows(PersistentCollection collection, Object key, SharedSes } if ( MODEL_MUTATION_LOGGER.isTraceEnabled() ) { - MODEL_MUTATION_LOGGER.tracef( - "Deleting removed collection rows - %s : %s", - mutationTarget.getRolePath(), - key - ); + MODEL_MUTATION_LOGGER.deletingRemovedCollectionRows( mutationTarget.getRolePath(), key ); } final MutationExecutor mutationExecutor = mutationExecutorService.createExecutor( @@ -80,7 +76,7 @@ public void deleteRows(PersistentCollection collection, Object key, SharedSes final Iterator deletes = collection.getDeletes( collectionDescriptor, !deleteByIndex ); if ( !deletes.hasNext() ) { - MODEL_MUTATION_LOGGER.trace( "No rows to delete" ); + MODEL_MUTATION_LOGGER.noRowsToDelete(); return; } @@ -105,8 +101,7 @@ public void deleteRows(PersistentCollection collection, Object key, SharedSes deletionCount++; } - MODEL_MUTATION_LOGGER.tracef( "Done deleting %s collection rows : %s", - deletionCount, mutationTarget.getRolePath() ); + MODEL_MUTATION_LOGGER.doneDeletingCollectionRows( deletionCount, mutationTarget.getRolePath() ); } finally { mutationExecutor.release(); diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/DeleteRowsCoordinatorTablePerSubclass.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/DeleteRowsCoordinatorTablePerSubclass.java index 705c125db538..fcf11d133063 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/DeleteRowsCoordinatorTablePerSubclass.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/DeleteRowsCoordinatorTablePerSubclass.java @@ -56,11 +56,7 @@ public CollectionMutationTarget getMutationTarget() { @Override public void deleteRows(PersistentCollection collection, Object key, SharedSessionContractImplementor session) { if ( MODEL_MUTATION_LOGGER.isTraceEnabled() ) { - MODEL_MUTATION_LOGGER.tracef( - "Deleting removed collection rows - %s : %s", - mutationTarget.getRolePath(), - key - ); + MODEL_MUTATION_LOGGER.deletingRemovedCollectionRows( mutationTarget.getRolePath(), key ); } final PluralAttributeMapping pluralAttribute = mutationTarget.getTargetPart(); @@ -68,7 +64,7 @@ public void deleteRows(PersistentCollection collection, Object key, SharedSes final Iterator deletes = collection.getDeletes( collectionDescriptor, !deleteByIndex ); if ( !deletes.hasNext() ) { - MODEL_MUTATION_LOGGER.trace( "No rows to delete" ); + MODEL_MUTATION_LOGGER.noRowsToDelete(); return; } final MutationExecutor[] executors = new MutationExecutor[subclassEntries.length]; @@ -108,8 +104,7 @@ public void deleteRows(PersistentCollection collection, Object key, SharedSes deletionCount++; } - MODEL_MUTATION_LOGGER.tracef( "Done deleting %s collection rows : %s", - deletionCount, mutationTarget.getRolePath() ); + MODEL_MUTATION_LOGGER.doneDeletingCollectionRows( deletionCount, mutationTarget.getRolePath() ); } finally { for ( MutationExecutor executor : executors ) { diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/InsertRowsCoordinatorStandard.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/InsertRowsCoordinatorStandard.java index 2382c70d9c8f..5e031a576bd2 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/InsertRowsCoordinatorStandard.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/InsertRowsCoordinatorStandard.java @@ -66,11 +66,7 @@ public void insertRows( } if ( MODEL_MUTATION_LOGGER.isTraceEnabled() ) { - MODEL_MUTATION_LOGGER.tracef( - "Inserting collection rows - %s : %s", - mutationTarget.getRolePath(), - id - ); + MODEL_MUTATION_LOGGER.insertingNewCollectionRows( mutationTarget.getRolePath(), id ); } final PluralAttributeMapping pluralAttribute = mutationTarget.getTargetPart(); @@ -87,11 +83,7 @@ public void insertRows( final Iterator entries = collection.entries( collectionDescriptor ); collection.preInsert( collectionDescriptor ); if ( !entries.hasNext() ) { - MODEL_MUTATION_LOGGER.tracef( - "No collection rows to insert - %s : %s", - mutationTarget.getRolePath(), - id - ); + MODEL_MUTATION_LOGGER.noCollectionRowsToInsert( mutationTarget.getRolePath(), id ); return; } @@ -118,8 +110,7 @@ public void insertRows( entryCount++; } - MODEL_MUTATION_LOGGER.tracef( "Done inserting %s collection rows : %s", - entryCount, mutationTarget.getRolePath() ); + MODEL_MUTATION_LOGGER.doneInsertingCollectionRows( entryCount, mutationTarget.getRolePath() ); } finally { diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/InsertRowsCoordinatorTablePerSubclass.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/InsertRowsCoordinatorTablePerSubclass.java index ec9e72dddd46..fb1f4028b216 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/InsertRowsCoordinatorTablePerSubclass.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/InsertRowsCoordinatorTablePerSubclass.java @@ -65,13 +65,8 @@ public void insertRows( Object id, EntryFilter entryChecker, SharedSessionContractImplementor session) { - final boolean loggerTraceEnabled = MODEL_MUTATION_LOGGER.isTraceEnabled(); - if ( loggerTraceEnabled ) { - MODEL_MUTATION_LOGGER.tracef( - "Inserting collection rows - %s : %s", - mutationTarget.getRolePath(), - id - ); + if ( MODEL_MUTATION_LOGGER.isTraceEnabled() ) { + MODEL_MUTATION_LOGGER.insertingNewCollectionRows( mutationTarget.getRolePath(), id ); } final PluralAttributeMapping pluralAttribute = mutationTarget.getTargetPart(); @@ -80,13 +75,7 @@ public void insertRows( final Iterator entries = collection.entries( collectionDescriptor ); collection.preInsert( collectionDescriptor ); if ( !entries.hasNext() ) { - if ( loggerTraceEnabled ) { - MODEL_MUTATION_LOGGER.tracef( - "No collection rows to insert - %s : %s", - mutationTarget.getRolePath(), - id - ); - } + MODEL_MUTATION_LOGGER.noCollectionRowsToInsert( mutationTarget.getRolePath(), id ); return; } final MutationExecutor[] executors = new MutationExecutor[subclassEntries.length]; @@ -125,13 +114,7 @@ public void insertRows( entryCount++; } - if ( loggerTraceEnabled ) { - MODEL_MUTATION_LOGGER.tracef( - "Done inserting %s collection rows: %s", - entryCount, - mutationTarget.getRolePath() - ); - } + MODEL_MUTATION_LOGGER.doneInsertingCollectionRows( entryCount, mutationTarget.getRolePath() ); } finally { diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/RemoveCoordinatorStandard.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/RemoveCoordinatorStandard.java index 82f1cc64f3f2..f288b1ea5ac5 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/RemoveCoordinatorStandard.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/RemoveCoordinatorStandard.java @@ -73,11 +73,7 @@ public String getSqlString() { @Override public void deleteAllRows(Object key, SharedSessionContractImplementor session) { if ( MODEL_MUTATION_LOGGER.isTraceEnabled() ) { - MODEL_MUTATION_LOGGER.tracef( - "Deleting collection - %s : %s", - mutationTarget.getRolePath(), - key - ); + MODEL_MUTATION_LOGGER.removingCollection( mutationTarget.getRolePath(), key ); } if ( operationGroup == null ) { diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/RemoveCoordinatorTablePerSubclass.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/RemoveCoordinatorTablePerSubclass.java index 1d2e64d5d4f0..af89c3e7f06b 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/RemoveCoordinatorTablePerSubclass.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/mutation/RemoveCoordinatorTablePerSubclass.java @@ -64,11 +64,7 @@ public String getSqlString() { @Override public void deleteAllRows(Object key, SharedSessionContractImplementor session) { if ( MODEL_MUTATION_LOGGER.isTraceEnabled() ) { - MODEL_MUTATION_LOGGER.tracef( - "Deleting collection - %s : %s", - mutationTarget.getRolePath(), - key - ); + MODEL_MUTATION_LOGGER.removingCollection( mutationTarget.getRolePath(), key ); } MutationOperationGroup[] operationGroups = this.operationGroups; diff --git a/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java index c538e7309ca8..488239b5cba6 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java @@ -232,7 +232,6 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; -import java.util.BitSet; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -2429,7 +2428,7 @@ public int[] resolveDirtyAttributeIndexes( final Object[] previousState, final String[] attributeNames, final SessionImplementor session) { - final BitSet mutablePropertiesIndexes = getMutablePropertiesIndexes(); + final var mutablePropertiesIndexes = getMutablePropertiesIndexes(); final int estimatedSize = attributeNames == null ? 0 @@ -2747,13 +2746,12 @@ public ModelPart getIdentifierDescriptor() { protected void logStaticSQL() { if ( MODEL_MUTATION_LOGGER.isTraceEnabled() ) { - MODEL_MUTATION_LOGGER.tracef( "Static SQL for entity: %s", getEntityName() ); + MODEL_MUTATION_LOGGER.staticSqlForEntity( getEntityName() ); for ( var entry : lazyLoadPlanByFetchGroup.entrySet() ) { - MODEL_MUTATION_LOGGER.tracef( " Lazy select (%s) : %s", - entry.getKey(), entry.getValue().getJdbcSelect().getSqlString() ); + MODEL_MUTATION_LOGGER.lazySelect( String.valueOf(entry.getKey()), entry.getValue().getJdbcSelect().getSqlString() ); } if ( sqlVersionSelectString != null ) { - MODEL_MUTATION_LOGGER.tracef( " Version select: %s", sqlVersionSelectString ); + MODEL_MUTATION_LOGGER.versionSelect( sqlVersionSelectString ); } { @@ -2761,7 +2759,7 @@ protected void logStaticSQL() { if ( staticInsertGroup != null ) { for ( int i = 0; i < staticInsertGroup.getNumberOfOperations(); i++ ) { if ( staticInsertGroup.getOperation( i ) instanceof JdbcOperation jdbcOperation ) { - MODEL_MUTATION_LOGGER.tracef( " Insert (%s): %s", i, jdbcOperation.getSqlString() ); + MODEL_MUTATION_LOGGER.insertOperationSql( i, jdbcOperation.getSqlString() ); } } } @@ -2772,7 +2770,7 @@ protected void logStaticSQL() { if ( staticUpdateGroup != null ) { for ( int i = 0; i < staticUpdateGroup.getNumberOfOperations(); i++ ) { if ( staticUpdateGroup.getOperation( i ) instanceof JdbcOperation jdbcOperation ) { - MODEL_MUTATION_LOGGER.tracef( " Update (%s): %s", i, jdbcOperation.getSqlString() ); + MODEL_MUTATION_LOGGER.updateOperationSql( i, jdbcOperation.getSqlString() ); } } } @@ -2783,7 +2781,7 @@ protected void logStaticSQL() { if ( staticDeleteGroup != null ) { for ( int i = 0; i < staticDeleteGroup.getNumberOfOperations(); i++ ) { if ( staticDeleteGroup.getOperation( i ) instanceof JdbcOperation jdbcOperation ) { - MODEL_MUTATION_LOGGER.tracef( " Delete (%s): %s", i, jdbcOperation.getSqlString() ); + MODEL_MUTATION_LOGGER.deleteOperationSql( i, jdbcOperation.getSqlString() ); } } } diff --git a/hibernate-core/src/main/java/org/hibernate/persister/entity/mutation/AbstractMutationCoordinator.java b/hibernate-core/src/main/java/org/hibernate/persister/entity/mutation/AbstractMutationCoordinator.java index 240af8e19dd5..98014cb26964 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/entity/mutation/AbstractMutationCoordinator.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/entity/mutation/AbstractMutationCoordinator.java @@ -30,6 +30,7 @@ import static org.hibernate.sql.model.ModelMutationLogging.MODEL_MUTATION_LOGGER; + /** * Base support for coordinating mutations against an entity * @@ -100,10 +101,7 @@ protected MutationOperationGroup createOperationGroup(ValuesAnalysis valuesAnaly } else { skipped++; - MODEL_MUTATION_LOGGER.tracef( - "Skipping table update - %s", - tableMutation.getTableName() - ); + MODEL_MUTATION_LOGGER.skippingUpdate( tableMutation.getTableName() ); } } if ( skipped != 0 ) { diff --git a/hibernate-core/src/main/java/org/hibernate/sql/model/ModelMutationLogging.java b/hibernate-core/src/main/java/org/hibernate/sql/model/ModelMutationLogging.java index 12cee26d8cf1..77bec869b1a7 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/model/ModelMutationLogging.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/model/ModelMutationLogging.java @@ -7,7 +7,16 @@ import org.hibernate.Internal; import org.hibernate.internal.log.SubSystemLogging; +import java.lang.invoke.MethodHandles; + +import org.jboss.logging.BasicLogger; import org.jboss.logging.Logger; +import org.jboss.logging.annotations.LogMessage; +import org.jboss.logging.annotations.Message; +import org.jboss.logging.annotations.MessageLogger; +import org.jboss.logging.annotations.ValidIdRange; + +import static org.jboss.logging.Logger.Level.TRACE; /** * Logging related to entity and collection mutations stemming from persistence-context events @@ -18,10 +27,132 @@ name = ModelMutationLogging.NAME, description = "Logging related to entity and collection mutations stemming from persistence context events" ) +@MessageLogger(projectCode = "HHH") +@ValidIdRange(min = 90005101, max = 90005300) @Internal -public final class ModelMutationLogging { +public interface ModelMutationLogging extends BasicLogger { + + String NAME = SubSystemLogging.BASE + ".jdbc.mutation"; + + ModelMutationLogging MODEL_MUTATION_LOGGER = Logger.getMessageLogger( MethodHandles.lookup(), ModelMutationLogging.class, NAME ); + + @LogMessage(level = TRACE) + @Message(id = 90005101, value = "Static SQL for entity: %s") + void staticSqlForEntity(String entityName); + + @LogMessage(level = TRACE) + @Message(id = 90005102, value = " Lazy select (%s) : %s") + void lazySelect(String fetchGroup, String sql); + + @LogMessage(level = TRACE) + @Message(id = 90005103, value = " Version select: %s") + void versionSelect(String sql); + + @LogMessage(level = TRACE) + @Message(id = 90005104, value = " Insert (%s): %s") + void insertOperationSql(int index, String sql); + + @LogMessage(level = TRACE) + @Message(id = 90005105, value = " Update (%s): %s") + void updateOperationSql(int index, String sql); + + @LogMessage(level = TRACE) + @Message(id = 90005106, value = " Delete (%s): %s") + void deleteOperationSql(int index, String sql); + + @LogMessage(level = TRACE) + @Message(id = 90005107, value = "Static SQL for collection: %s") + void staticSqlForCollection(String role); + + @LogMessage(level = TRACE) + @Message(id = 90005108, value = " Row insert: %s") + void collectionRowInsert(String sql); + + @LogMessage(level = TRACE) + @Message(id = 90005109, value = " Row update: %s") + void collectionRowUpdate(String sql); + + @LogMessage(level = TRACE) + @Message(id = 90005110, value = " Row delete: %s") + void collectionRowDelete(String sql); + + @LogMessage(level = TRACE) + @Message(id = 90005111, value = " One-shot delete: %s") + void collectionOneShotDelete(String sql); + + @LogMessage(level = TRACE) + @Message(id = 90005112, value = "Performing delete (%s)") + void performingDelete(String tableName); + + @LogMessage(level = TRACE) + @Message(id = 90005113, value = "%s rows upsert-deleted from '%s'") + void upsertDeletedRowCount(int rowCount, String tableName); + + @LogMessage(level = TRACE) + @Message(id = 90005114, value = "Performing upsert of '%s'") + void performingUpsert(String tableName); + + @LogMessage(level = TRACE) + @Message(id = 90005115, value = "%s rows upserted in '%s'") + void upsertedRowCount(int rowCount, String tableName); + + @LogMessage(level = TRACE) + @Message(id = 90005116, value = "Updating collection rows: %s#%s") + void updatingCollectionRows(String rolePath, Object key); + + @LogMessage(level = TRACE) + @Message(id = 90005117, value = "Updated %s collection rows: %s#%s") + void updatedCollectionRows(int count, String rolePath, Object key); + + @LogMessage(level = TRACE) + @Message(id = 90005118, value = "Performing update of '%s'") + void performingUpdate(String tableName); + + @LogMessage(level = TRACE) + @Message(id = 90005119, value = "Deleting removed collection rows: %s#%s") + void deletingRemovedCollectionRows(String rolePath, Object key); + + @LogMessage(level = TRACE) + @Message(id = 90005120, value = "No rows to delete") + void noRowsToDelete(); + + @LogMessage(level = TRACE) + @Message(id = 90005121, value = "Done deleting %s collection rows: %s") + void doneDeletingCollectionRows(int rowCount, String rolePath); + + @LogMessage(level = TRACE) + @Message(id = 90005122, value = "Inserting collection rows: %s#%s") + void insertingNewCollectionRows(String rolePath, Object key); + + @LogMessage(level = TRACE) + @Message(id = 90005124, value = "Done inserting %s collection rows: %s") + void doneInsertingCollectionRows(int rowCount, String rolePath); + + @LogMessage(level = TRACE) + @Message(id = 90005125, value = "Deleting collection: %s#%s") + void removingCollection(String rolePath, Object key); + + @LogMessage(level = TRACE) + @Message(id = 90005127, value = "Batch add for table '%s' (batch position %s)") + void addBatchForTable(String tableName, int batchPosition); + + @LogMessage(level = TRACE) + @Message(id = 90005128, value = "Skipping batch add for table '%s' (batch position %s)") + void skippingAddBatchForTable(String tableName, int batchPosition); + + @LogMessage(level = TRACE) + @Message(id = 90005130, value = "Upsert update altered no rows; performing insert into '%s'") + void upsertUpdateNoRowsPerformingInsert(String tableName); + + @LogMessage(level = TRACE) + @Message(id = 90005131, value = "Skipping execution of secondary insert into '%s'") + void skippingSecondaryInsert(String tableName); - public static final String NAME = SubSystemLogging.BASE + ".jdbc.mutation"; + @LogMessage(level = TRACE) + @Message(id = 90005132, value = "Skipping update of '%s'") + void skippingUpdate(String tableName); - public static final Logger MODEL_MUTATION_LOGGER = Logger.getLogger( NAME ); + @LogMessage(level = TRACE) + @Message(id = 90005133, value = "No collection rows to insert: %s#%s") + void noCollectionRowsToInsert(String rolePath, Object id); } diff --git a/hibernate-core/src/main/java/org/hibernate/sql/model/jdbc/DeleteOrUpsertOperation.java b/hibernate-core/src/main/java/org/hibernate/sql/model/jdbc/DeleteOrUpsertOperation.java index 1a3ea8a308dc..5042cc87be35 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/model/jdbc/DeleteOrUpsertOperation.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/model/jdbc/DeleteOrUpsertOperation.java @@ -101,7 +101,7 @@ public void performMutation( } private void performDelete(JdbcValueBindings jdbcValueBindings, SharedSessionContractImplementor session) { - MODEL_MUTATION_LOGGER.tracef( "Performing delete (%s)", tableMapping.getTableName() ); + MODEL_MUTATION_LOGGER.performingDelete( tableMapping.getTableName() ); final TableDeleteStandard upsertDeleteAst = new TableDeleteStandard( optionalTableUpdate.getMutatingTable(), @@ -125,7 +125,7 @@ private void performDelete(JdbcValueBindings jdbcValueBindings, SharedSessionCon bindDeleteKeyValues( jdbcValueBindings, statementDetails, session ); final int rowCount = session.getJdbcCoordinator().getResultSetReturn() .executeUpdate( upsertDeleteStatement, statementDetails.getSqlString() ); - MODEL_MUTATION_LOGGER.tracef( "%s rows upsert-deleted from '%s'", rowCount, tableMapping.getTableName() ); + MODEL_MUTATION_LOGGER.upsertDeletedRowCount( rowCount, tableMapping.getTableName() ); try { getExpectation().verifyOutcome( rowCount, upsertDeleteStatement, -1, statementDetails.getSqlString() ); } @@ -189,7 +189,7 @@ private static void bindKeyValue( } private void performUpsert(JdbcValueBindings jdbcValueBindings, SharedSessionContractImplementor session) { - MODEL_MUTATION_LOGGER.tracef( "Performing upsert (%s)", tableMapping.getTableName() ); + MODEL_MUTATION_LOGGER.performingUpsert( tableMapping.getTableName() ); final var statementGroup = new PreparedStatementGroupSingleTable( upsertOperation, session ); final var statementDetails = statementGroup.resolvePreparedStatementDetails( tableMapping.getTableName() ); @@ -201,7 +201,7 @@ private void performUpsert(JdbcValueBindings jdbcValueBindings, SharedSessionCon final int rowCount = session.getJdbcCoordinator().getResultSetReturn() .executeUpdate( updateStatement, statementDetails.getSqlString() ); - MODEL_MUTATION_LOGGER.tracef( "%s rows upserted in '%s'", rowCount, tableMapping.getTableName() ); + MODEL_MUTATION_LOGGER.upsertedRowCount( rowCount, tableMapping.getTableName() ); try { getExpectation().verifyOutcome( rowCount, updateStatement, -1, statementDetails.getSqlString() ); } diff --git a/hibernate-core/src/main/java/org/hibernate/sql/model/jdbc/OptionalTableUpdateOperation.java b/hibernate-core/src/main/java/org/hibernate/sql/model/jdbc/OptionalTableUpdateOperation.java index 37bde22e7902..70362dc28fb4 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/model/jdbc/OptionalTableUpdateOperation.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/model/jdbc/OptionalTableUpdateOperation.java @@ -148,10 +148,7 @@ public void performMutation( } if ( !wasUpdated ) { - MODEL_MUTATION_LOGGER.tracef( - "Upsert update altered no rows; performing insert (%s)", - tableMapping.getTableName() - ); + MODEL_MUTATION_LOGGER.upsertUpdateNoRowsPerformingInsert( tableMapping.getTableName() ); try { performInsert( jdbcValueBindings, session ); } @@ -300,7 +297,7 @@ protected JdbcDeleteMutation createJdbcDelete(SharedSessionContractImplementor s private boolean performUpdate( JdbcValueBindings jdbcValueBindings, SharedSessionContractImplementor session) { - MODEL_MUTATION_LOGGER.tracef( "Performing update (%s)", tableMapping.getTableName() ); + MODEL_MUTATION_LOGGER.performingUpdate( tableMapping.getTableName() ); final JdbcServices jdbcServices = session.getJdbcServices(); final var statementGroup = new PreparedStatementGroupSingleTable( createJdbcUpdate( session ), session );