HHH-16461 @Version + session.refresh(entity, LockMode.PESSIMISTIC_WRITE) leads to StaleObjectStateException

This commit is contained in:
Andrea Boriero 2023-04-13 15:29:58 +02:00 committed by Christian Beikov
parent f80b90735e
commit c5893e7919
4 changed files with 18 additions and 1 deletions

View File

@ -75,4 +75,8 @@ public boolean hasQueryExecutionToBeAddedToStatistics() {
return true; return true;
} }
@Override
public boolean upgradeLocks() {
return true;
}
} }

View File

@ -90,4 +90,12 @@ default boolean hasQueryExecutionToBeAddedToStatistics() {
return false; return false;
} }
/**
* Does this query return objects that might be already cached
* by the session, whose lock mode may need upgrading
*/
default boolean upgradeLocks(){
return false;
}
} }

View File

@ -571,7 +571,7 @@ && getEntityKey().getIdentifier().equals( executionContext.getEntityId() ) ) {
} }
private void upgradeLockMode(RowProcessingState rowProcessingState) { private void upgradeLockMode(RowProcessingState rowProcessingState) {
if ( lockMode != LockMode.NONE ) { if ( lockMode != LockMode.NONE && rowProcessingState.upgradeLocks() ) {
final EntityEntry entry = final EntityEntry entry =
rowProcessingState.getSession().getPersistenceContextInternal() rowProcessingState.getSession().getPersistenceContextInternal()
.getEntry( entityInstance ); .getEntry( entityInstance );

View File

@ -201,4 +201,9 @@ public Initializer resolveInitializer(NavigablePath path) {
public boolean hasCollectionInitializers() { public boolean hasCollectionInitializers() {
return this.initializers.hasCollectionInitializers(); return this.initializers.hasCollectionInitializers();
} }
@Override
public boolean upgradeLocks() {
return executionContext.upgradeLocks();
}
} }