@@ -641,9 +641,9 @@ protected void resolveInstanceSubInitializers(EntityInitializerData data) {
641
641
}
642
642
}
643
643
final RowProcessingState rowProcessingState = data .getRowProcessingState ();
644
- assert entityEntry = = rowProcessingState .getSession ()
645
- .getPersistenceContextInternal ()
646
- .getEntry ( data .entityInstanceForNotify );
644
+ final PersistenceContext persistenceContext = rowProcessingState .getSession ()
645
+ .getPersistenceContextInternal ();
646
+ assert entityEntry == persistenceContext .getEntry ( data .entityInstanceForNotify );
647
647
final Object [] loadedState = entityEntry .getLoadedState ();
648
648
final Object [] state ;
649
649
if ( loadedState == null ) {
@@ -939,9 +939,26 @@ public void resolveInstance(Object instance, EntityInitializerData data) {
939
939
&& ( (ToOneAttributeMapping ) referencedModelPart ).getSideNature () == TARGET ;
940
940
return ;
941
941
}
942
- // If the entity initializer is null, we know the entity is fully initialized,
943
- // otherwise it will be initialized by some other initializer
944
- data .setState ( data .entityHolder .getEntityInitializer () == null ? State .INITIALIZED : State .RESOLVED );
942
+ if ( data .concreteDescriptor .getBytecodeEnhancementMetadata ().isEnhancedForLazyLoading ()
943
+ && isPersistentAttributeInterceptable ( data .entityInstanceForNotify )
944
+ && getAttributeInterceptor ( data .entityInstanceForNotify ) instanceof EnhancementAsProxyLazinessInterceptor enhancementInterceptor
945
+ && !enhancementInterceptor .isInitialized () ) {
946
+ data .setState ( State .RESOLVED );
947
+ }
948
+ else {
949
+ // If the entity initializer is null, we know the entity is fully initialized,
950
+ // otherwise it will be initialized by some other initializer
951
+ data .setState ( data .entityHolder .getEntityInitializer () == null ? State .INITIALIZED : State .RESOLVED );
952
+ }
953
+
954
+ if ( data .getState () == State .RESOLVED ) {
955
+ data .entityHolder = persistenceContext .claimEntityHolderIfPossible (
956
+ data .entityKey ,
957
+ data .entityInstanceForNotify ,
958
+ rowProcessingState .getJdbcValuesSourceProcessingState (),
959
+ this
960
+ );
961
+ }
945
962
}
946
963
else if ( lazyInitializer .isUninitialized () ) {
947
964
data .setState ( State .RESOLVED );
@@ -1751,6 +1768,10 @@ protected void forEachSubInitializer(BiConsumer<Initializer<?>, RowProcessingSta
1751
1768
}
1752
1769
}
1753
1770
1771
+ private static PersistentAttributeInterceptor getAttributeInterceptor (Object entity ) {
1772
+ return asPersistentAttributeInterceptable ( entity ).$$_hibernate_getInterceptor ();
1773
+ }
1774
+
1754
1775
@ Override
1755
1776
public String toString () {
1756
1777
return "EntityJoinedFetchInitializer(" + LoggingHelper .toLoggableString ( getNavigablePath () ) + ")" ;
0 commit comments