HHH-18565 Mark bytecode enhanced lazy entities as RESOLVED

This commit is contained in:
Andrea Boriero 2024-09-10 19:04:21 +02:00 committed by Andrea Boriero
parent 1a03011d8e
commit c1d9ac00bf
1 changed files with 27 additions and 6 deletions

View File

@ -641,9 +641,9 @@ public class EntityInitializerImpl extends AbstractInitializer<EntityInitializer
}
}
final RowProcessingState rowProcessingState = data.getRowProcessingState();
assert entityEntry == rowProcessingState.getSession()
.getPersistenceContextInternal()
.getEntry( data.entityInstanceForNotify );
final PersistenceContext persistenceContext = rowProcessingState.getSession()
.getPersistenceContextInternal();
assert entityEntry == persistenceContext.getEntry( data.entityInstanceForNotify );
final Object[] loadedState = entityEntry.getLoadedState();
final Object[] state;
if ( loadedState == null ) {
@ -939,10 +939,27 @@ public class EntityInitializerImpl extends AbstractInitializer<EntityInitializer
&& ( (ToOneAttributeMapping) referencedModelPart ).getSideNature() == TARGET;
return;
}
if ( data.concreteDescriptor.getBytecodeEnhancementMetadata().isEnhancedForLazyLoading()
&& isPersistentAttributeInterceptable( data.entityInstanceForNotify )
&& getAttributeInterceptor( data.entityInstanceForNotify ) instanceof EnhancementAsProxyLazinessInterceptor enhancementInterceptor
&& !enhancementInterceptor.isInitialized() ) {
data.setState( State.RESOLVED );
}
else {
// If the entity initializer is null, we know the entity is fully initialized,
// otherwise it will be initialized by some other initializer
data.setState( data.entityHolder.getEntityInitializer() == null ? State.INITIALIZED : State.RESOLVED );
}
if ( data.getState() == State.RESOLVED ) {
data.entityHolder = persistenceContext.claimEntityHolderIfPossible(
data.entityKey,
data.entityInstanceForNotify,
rowProcessingState.getJdbcValuesSourceProcessingState(),
this
);
}
}
else if ( lazyInitializer.isUninitialized() ) {
data.setState( State.RESOLVED );
// Read the discriminator from the result set if necessary
@ -1751,6 +1768,10 @@ public class EntityInitializerImpl extends AbstractInitializer<EntityInitializer
}
}
private static PersistentAttributeInterceptor getAttributeInterceptor(Object entity) {
return asPersistentAttributeInterceptable( entity ).$$_hibernate_getInterceptor();
}
@Override
public String toString() {
return "EntityJoinedFetchInitializer(" + LoggingHelper.toLoggableString( getNavigablePath() ) + ")";