@@ -133,6 +133,7 @@ public class EntityInitializerImpl extends AbstractInitializer<EntityInitializer
133133 private final @ Nullable DomainResultAssembler <Object > rowIdAssembler ;
134134
135135 private final DomainResultAssembler <?>[][] assemblers ;
136+ private final @ Nullable Initializer <?>[] allInitializers ;
136137 private final @ Nullable Initializer <?>[][] subInitializers ;
137138 private final @ Nullable Initializer <?>[][] subInitializersForResolveFromInitialized ;
138139 private final @ Nullable Initializer <?>[][] collectionContainingSubInitializers ;
@@ -279,8 +280,10 @@ public EntityInitializerImpl(
279280 ? rowIdResult .createResultAssembler ( this , creationState )
280281 : null ;
281282
283+ final int fetchableCount = entityDescriptor .getNumberOfFetchables ();
282284 final Collection <EntityMappingType > subMappingTypes = rootEntityDescriptor .getSubMappingTypes ();
283285 final DomainResultAssembler <?>[][] assemblers = new DomainResultAssembler [subMappingTypes .size () + 1 ][];
286+ final Initializer <?>[] allInitializers = new Initializer <?>[fetchableCount ];
284287 final Initializer <?>[][] subInitializers = new Initializer <?>[subMappingTypes .size () + 1 ][];
285288 final Initializer <?>[][] eagerSubInitializers = new Initializer <?>[subMappingTypes .size () + 1 ][];
286289 final Initializer <?>[][] collectionContainingSubInitializers = new Initializer <?>[subMappingTypes .size () + 1 ][];
@@ -296,8 +299,7 @@ public EntityInitializerImpl(
296299 }
297300
298301 boolean hasLazySubInitializers = false ;
299- final int size = entityDescriptor .getNumberOfFetchables ();
300- for ( int i = 0 ; i < size ; i ++ ) {
302+ for ( int i = 0 ; i < fetchableCount ; i ++ ) {
301303 final AttributeMapping attributeMapping = entityDescriptor .getFetchable ( i ).asAttributeMapping ();
302304 final Fetch fetch = resultDescriptor .findFetch ( attributeMapping );
303305 final DomainResultAssembler <?> stateAssembler = fetch == null
@@ -310,12 +312,13 @@ public EntityInitializerImpl(
310312
311313 final Initializer <?> subInitializer = stateAssembler .getInitializer ();
312314 if ( subInitializer != null ) {
315+ allInitializers [i ] = subInitializer ;
313316 if ( subInitializers [subclassId ] == null ) {
314- subInitializers [subclassId ] = new Initializer <?>[size ];
315- eagerSubInitializers [subclassId ] = new Initializer <?>[size ];
316- collectionContainingSubInitializers [subclassId ] = new Initializer <?>[size ];
317- lazySets [subclassId ] = new BitSet ( size );
318- maybeLazySets [subclassId ] = new BitSet ( size );
317+ subInitializers [subclassId ] = new Initializer <?>[fetchableCount ];
318+ eagerSubInitializers [subclassId ] = new Initializer <?>[fetchableCount ];
319+ collectionContainingSubInitializers [subclassId ] = new Initializer <?>[fetchableCount ];
320+ lazySets [subclassId ] = new BitSet ( fetchableCount );
321+ maybeLazySets [subclassId ] = new BitSet ( fetchableCount );
319322 }
320323 subInitializers [subclassId ][stateArrayPosition ] = subInitializer ;
321324 if ( subInitializer .isEager () ) {
@@ -349,11 +352,11 @@ public EntityInitializerImpl(
349352 updatableAttributeMutabilityPlans [subMappingType .getSubclassId ()][stateArrayPosition ] = updatableAttributeMutabilityPlans [subclassId ][stateArrayPosition ];
350353 if ( subInitializer != null ) {
351354 if ( subInitializers [subMappingType .getSubclassId ()] == null ) {
352- subInitializers [subMappingType .getSubclassId ()] = new Initializer <?>[size ];
353- eagerSubInitializers [subMappingType .getSubclassId ()] = new Initializer <?>[size ];
354- collectionContainingSubInitializers [subMappingType .getSubclassId ()] = new Initializer <?>[size ];
355- lazySets [subMappingType .getSubclassId ()] = new BitSet (size );
356- maybeLazySets [subMappingType .getSubclassId ()] = new BitSet (size );
355+ subInitializers [subMappingType .getSubclassId ()] = new Initializer <?>[fetchableCount ];
356+ eagerSubInitializers [subMappingType .getSubclassId ()] = new Initializer <?>[fetchableCount ];
357+ collectionContainingSubInitializers [subMappingType .getSubclassId ()] = new Initializer <?>[fetchableCount ];
358+ lazySets [subMappingType .getSubclassId ()] = new BitSet (fetchableCount );
359+ maybeLazySets [subMappingType .getSubclassId ()] = new BitSet (fetchableCount );
357360 }
358361 subInitializers [subMappingType .getSubclassId ()][stateArrayPosition ] = subInitializer ;
359362 eagerSubInitializers [subMappingType .getSubclassId ()][stateArrayPosition ] = eagerSubInitializers [subclassId ][stateArrayPosition ];
@@ -411,6 +414,7 @@ public EntityInitializerImpl(
411414 }
412415
413416 this .assemblers = assemblers ;
417+ this .allInitializers = allInitializers ;
414418 this .subInitializers = subInitializers ;
415419 this .subInitializersForResolveFromInitialized = rootEntityDescriptor .getBytecodeEnhancementMetadata ().isEnhancedForLazyLoading ()
416420 ? subInitializers
@@ -1762,11 +1766,9 @@ protected void forEachSubInitializer(BiConsumer<Initializer<?>, RowProcessingSta
17621766 }
17631767 final EntityInitializerData entityInitializerData = (EntityInitializerData ) data ;
17641768 if ( entityInitializerData .concreteDescriptor == null ) {
1765- for ( Initializer <?>[] initializers : subInitializers ) {
1766- for ( Initializer <?> initializer : initializers ) {
1767- if ( initializer != null ) {
1768- consumer .accept ( initializer , rowProcessingState );
1769- }
1769+ for ( Initializer <?> initializer : allInitializers ) {
1770+ if ( initializer != null ) {
1771+ consumer .accept ( initializer , rowProcessingState );
17701772 }
17711773 }
17721774 }
0 commit comments