mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-25 21:04:51 +00:00
HHH-16126 TransientObjectException when loading versioned entity from second-level cache
This commit is contained in:
parent
470db8bf7d
commit
aead5fe92a
@ -96,6 +96,7 @@ public abstract class AbstractEntityInitializer extends AbstractFetchParentAcces
|
|||||||
// per-row state
|
// per-row state
|
||||||
private EntityPersister concreteDescriptor;
|
private EntityPersister concreteDescriptor;
|
||||||
private EntityKey entityKey;
|
private EntityKey entityKey;
|
||||||
|
private Object version;
|
||||||
private Object entityInstance;
|
private Object entityInstance;
|
||||||
private Object entityInstanceForNotify;
|
private Object entityInstanceForNotify;
|
||||||
protected boolean missing;
|
protected boolean missing;
|
||||||
@ -827,7 +828,7 @@ private void initializeEntityInstance(Object toInitialize, RowProcessingState ro
|
|||||||
// Also register possible unique key entries
|
// Also register possible unique key entries
|
||||||
registerPossibleUniqueKeyEntries( toInitialize, session );
|
registerPossibleUniqueKeyEntries( toInitialize, session );
|
||||||
|
|
||||||
final Object version = versionAssembler != null ? versionAssembler.assemble( rowProcessingState ) : null;
|
version = versionAssembler != null ? versionAssembler.assemble( rowProcessingState ) : null;
|
||||||
final Object rowId = rowIdAssembler != null ? rowIdAssembler.assemble( rowProcessingState ) : null;
|
final Object rowId = rowIdAssembler != null ? rowIdAssembler.assemble( rowProcessingState ) : null;
|
||||||
|
|
||||||
// from the perspective of Hibernate, an entity is read locked as soon as it is read
|
// from the perspective of Hibernate, an entity is read locked as soon as it is read
|
||||||
@ -847,8 +848,6 @@ private void initializeEntityInstance(Object toInitialize, RowProcessingState ro
|
|||||||
false
|
false
|
||||||
);
|
);
|
||||||
|
|
||||||
updateCaches( toInitialize, rowProcessingState, session, persistenceContext, entityIdentifier, version );
|
|
||||||
|
|
||||||
registerNaturalIdResolution( persistenceContext, entityIdentifier );
|
registerNaturalIdResolution( persistenceContext, entityIdentifier );
|
||||||
|
|
||||||
takeSnapshot( rowProcessingState, session, persistenceContext, entityEntry );
|
takeSnapshot( rowProcessingState, session, persistenceContext, entityEntry );
|
||||||
@ -1141,10 +1140,23 @@ protected LockMode getLockMode() {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void finishUpRow(RowProcessingState rowProcessingState) {
|
public void finishUpRow(RowProcessingState rowProcessingState) {
|
||||||
|
final SharedSessionContractImplementor session = rowProcessingState.getSession();
|
||||||
|
if ( resolvedEntityState != null ) {
|
||||||
|
updateCaches(
|
||||||
|
entityInstanceForNotify,
|
||||||
|
rowProcessingState,
|
||||||
|
session,
|
||||||
|
session.getPersistenceContext(),
|
||||||
|
entityKey.getIdentifier(),
|
||||||
|
version
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// reset row state
|
// reset row state
|
||||||
isOwningInitializer = false;
|
isOwningInitializer = false;
|
||||||
concreteDescriptor = null;
|
concreteDescriptor = null;
|
||||||
entityKey = null;
|
entityKey = null;
|
||||||
|
version = null;
|
||||||
entityInstance = null;
|
entityInstance = null;
|
||||||
entityInstanceForNotify = null;
|
entityInstanceForNotify = null;
|
||||||
missing = false;
|
missing = false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user