@@ -131,6 +131,7 @@ public class EntityInitializerImpl extends AbstractInitializer<EntityInitializer
131131 private final @ Nullable DomainResultAssembler <Object > rowIdAssembler ;
132132
133133 private final DomainResultAssembler <?>[][] assemblers ;
134+ private final @ Nullable Initializer <?>[] allInitializers ;
134135 private final @ Nullable Initializer <?>[][] subInitializers ;
135136 private final @ Nullable Initializer <?>[][] subInitializersForResolveFromInitialized ;
136137 private final @ Nullable Initializer <?>[][] collectionContainingSubInitializers ;
@@ -283,8 +284,10 @@ public EntityInitializerImpl(
283284 ? rowIdResult .createResultAssembler ( this , creationState )
284285 : null ;
285286
287+ final int fetchableCount = entityDescriptor .getNumberOfFetchables ();
286288 final Collection <EntityMappingType > subMappingTypes = rootEntityDescriptor .getSubMappingTypes ();
287289 final DomainResultAssembler <?>[][] assemblers = new DomainResultAssembler [subMappingTypes .size () + 1 ][];
290+ final Initializer <?>[] allInitializers = new Initializer <?>[fetchableCount ];
288291 final Initializer <?>[][] subInitializers = new Initializer <?>[subMappingTypes .size () + 1 ][];
289292 final Initializer <?>[][] eagerSubInitializers = new Initializer <?>[subMappingTypes .size () + 1 ][];
290293 final Initializer <?>[][] collectionContainingSubInitializers = new Initializer <?>[subMappingTypes .size () + 1 ][];
@@ -304,8 +307,7 @@ public EntityInitializerImpl(
304307 }
305308
306309 boolean hasLazySubInitializers = false ;
307- final int size = entityDescriptor .getNumberOfFetchables ();
308- for ( int i = 0 ; i < size ; i ++ ) {
310+ for ( int i = 0 ; i < fetchableCount ; i ++ ) {
309311 final AttributeMapping attributeMapping = entityDescriptor .getFetchable ( i ).asAttributeMapping ();
310312 final Fetch fetch = resultDescriptor .findFetch ( attributeMapping );
311313 final DomainResultAssembler <?> stateAssembler = fetch == null
@@ -318,12 +320,13 @@ public EntityInitializerImpl(
318320
319321 final Initializer <?> subInitializer = stateAssembler .getInitializer ();
320322 if ( subInitializer != null ) {
323+ allInitializers [i ] = subInitializer ;
321324 if ( subInitializers [subclassId ] == null ) {
322- subInitializers [subclassId ] = new Initializer <?>[size ];
323- eagerSubInitializers [subclassId ] = new Initializer <?>[size ];
324- collectionContainingSubInitializers [subclassId ] = new Initializer <?>[size ];
325- lazySets [subclassId ] = new BitSet ( size );
326- maybeLazySets [subclassId ] = new BitSet ( size );
325+ subInitializers [subclassId ] = new Initializer <?>[fetchableCount ];
326+ eagerSubInitializers [subclassId ] = new Initializer <?>[fetchableCount ];
327+ collectionContainingSubInitializers [subclassId ] = new Initializer <?>[fetchableCount ];
328+ lazySets [subclassId ] = new BitSet ( fetchableCount );
329+ maybeLazySets [subclassId ] = new BitSet ( fetchableCount );
327330 }
328331 subInitializers [subclassId ][stateArrayPosition ] = subInitializer ;
329332 if ( subInitializer .isEager () ) {
@@ -358,11 +361,11 @@ public EntityInitializerImpl(
358361 updatableAttributeMutabilityPlans [subclassId ][stateArrayPosition ];
359362 if ( subInitializer != null ) {
360363 if ( subInitializers [subMappingType .getSubclassId ()] == null ) {
361- subInitializers [subMappingType .getSubclassId ()] = new Initializer <?>[size ];
362- eagerSubInitializers [subMappingType .getSubclassId ()] = new Initializer <?>[size ];
363- collectionContainingSubInitializers [subMappingType .getSubclassId ()] = new Initializer <?>[size ];
364- lazySets [subMappingType .getSubclassId ()] = new BitSet (size );
365- maybeLazySets [subMappingType .getSubclassId ()] = new BitSet (size );
364+ subInitializers [subMappingType .getSubclassId ()] = new Initializer <?>[fetchableCount ];
365+ eagerSubInitializers [subMappingType .getSubclassId ()] = new Initializer <?>[fetchableCount ];
366+ collectionContainingSubInitializers [subMappingType .getSubclassId ()] = new Initializer <?>[fetchableCount ];
367+ lazySets [subMappingType .getSubclassId ()] = new BitSet (fetchableCount );
368+ maybeLazySets [subMappingType .getSubclassId ()] = new BitSet (fetchableCount );
366369 }
367370 subInitializers [subMappingType .getSubclassId ()][stateArrayPosition ] = subInitializer ;
368371 eagerSubInitializers [subMappingType .getSubclassId ()][stateArrayPosition ] =
@@ -422,6 +425,7 @@ public EntityInitializerImpl(
422425 }
423426
424427 this .assemblers = assemblers ;
428+ this .allInitializers = allInitializers ;
425429 this .subInitializers = subInitializers ;
426430 this .subInitializersForResolveFromInitialized =
427431 rootEntityDescriptor .getBytecodeEnhancementMetadata ().isEnhancedForLazyLoading ()
@@ -1780,11 +1784,9 @@ protected void forEachSubInitializer(BiConsumer<Initializer<?>, RowProcessingSta
17801784 }
17811785 final EntityInitializerData entityInitializerData = (EntityInitializerData ) data ;
17821786 if ( entityInitializerData .concreteDescriptor == null ) {
1783- for ( Initializer <?>[] initializers : subInitializers ) {
1784- for ( Initializer <?> initializer : initializers ) {
1785- if ( initializer != null ) {
1786- consumer .accept ( initializer , rowProcessingState );
1787- }
1787+ for ( Initializer <?> initializer : allInitializers ) {
1788+ if ( initializer != null ) {
1789+ consumer .accept ( initializer , rowProcessingState );
17881790 }
17891791 }
17901792 }
0 commit comments