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 Andrea Boriero
parent f78c5d375d
commit 55f46ced44
4 changed files with 18 additions and 1 deletions

View File

@ -70,4 +70,8 @@ public class SqmJdbcExecutionContextAdapter extends BaseExecutionContext {
return true;
}
@Override
public boolean upgradeLocks() {
return true;
}
}

View File

@ -97,4 +97,12 @@ public interface ExecutionContext {
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

@ -557,7 +557,7 @@ public abstract class AbstractEntityInitializer extends AbstractFetchParentAcces
}
private void upgradeLockMode(RowProcessingState rowProcessingState) {
if ( lockMode != LockMode.NONE ) {
if ( lockMode != LockMode.NONE && rowProcessingState.upgradeLocks() ) {
final EntityEntry entry =
rowProcessingState.getSession().getPersistenceContextInternal()
.getEntry( entityInstance );

View File

@ -196,4 +196,9 @@ public class RowProcessingStateStandardImpl extends BaseExecutionContext impleme
public boolean hasCollectionInitializers() {
return this.initializers.hasCollectionInitializers();
}
@Override
public boolean upgradeLocks() {
return executionContext.upgradeLocks();
}
}