@@ -133,6 +133,7 @@ public class EntityInitializerImpl extends AbstractInitializer<EntityInitializer
133
133
private final @ Nullable DomainResultAssembler <Object > rowIdAssembler ;
134
134
135
135
private final DomainResultAssembler <?>[][] assemblers ;
136
+ private final @ Nullable Initializer <?>[] allInitializers ;
136
137
private final @ Nullable Initializer <?>[][] subInitializers ;
137
138
private final @ Nullable Initializer <?>[][] subInitializersForResolveFromInitialized ;
138
139
private final @ Nullable Initializer <?>[][] collectionContainingSubInitializers ;
@@ -279,8 +280,10 @@ public EntityInitializerImpl(
279
280
? rowIdResult .createResultAssembler ( this , creationState )
280
281
: null ;
281
282
283
+ final int fetchableCount = entityDescriptor .getNumberOfFetchables ();
282
284
final Collection <EntityMappingType > subMappingTypes = rootEntityDescriptor .getSubMappingTypes ();
283
285
final DomainResultAssembler <?>[][] assemblers = new DomainResultAssembler [subMappingTypes .size () + 1 ][];
286
+ final Initializer <?>[] allInitializers = new Initializer <?>[fetchableCount ];
284
287
final Initializer <?>[][] subInitializers = new Initializer <?>[subMappingTypes .size () + 1 ][];
285
288
final Initializer <?>[][] eagerSubInitializers = new Initializer <?>[subMappingTypes .size () + 1 ][];
286
289
final Initializer <?>[][] collectionContainingSubInitializers = new Initializer <?>[subMappingTypes .size () + 1 ][];
@@ -296,8 +299,7 @@ public EntityInitializerImpl(
296
299
}
297
300
298
301
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 ++ ) {
301
303
final AttributeMapping attributeMapping = entityDescriptor .getFetchable ( i ).asAttributeMapping ();
302
304
final Fetch fetch = resultDescriptor .findFetch ( attributeMapping );
303
305
final DomainResultAssembler <?> stateAssembler = fetch == null
@@ -310,12 +312,13 @@ public EntityInitializerImpl(
310
312
311
313
final Initializer <?> subInitializer = stateAssembler .getInitializer ();
312
314
if ( subInitializer != null ) {
315
+ allInitializers [i ] = subInitializer ;
313
316
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 );
319
322
}
320
323
subInitializers [subclassId ][stateArrayPosition ] = subInitializer ;
321
324
if ( subInitializer .isEager () ) {
@@ -349,11 +352,11 @@ public EntityInitializerImpl(
349
352
updatableAttributeMutabilityPlans [subMappingType .getSubclassId ()][stateArrayPosition ] = updatableAttributeMutabilityPlans [subclassId ][stateArrayPosition ];
350
353
if ( subInitializer != null ) {
351
354
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 );
357
360
}
358
361
subInitializers [subMappingType .getSubclassId ()][stateArrayPosition ] = subInitializer ;
359
362
eagerSubInitializers [subMappingType .getSubclassId ()][stateArrayPosition ] = eagerSubInitializers [subclassId ][stateArrayPosition ];
@@ -411,6 +414,7 @@ public EntityInitializerImpl(
411
414
}
412
415
413
416
this .assemblers = assemblers ;
417
+ this .allInitializers = allInitializers ;
414
418
this .subInitializers = subInitializers ;
415
419
this .subInitializersForResolveFromInitialized = rootEntityDescriptor .getBytecodeEnhancementMetadata ().isEnhancedForLazyLoading ()
416
420
? subInitializers
@@ -1762,11 +1766,9 @@ protected void forEachSubInitializer(BiConsumer<Initializer<?>, RowProcessingSta
1762
1766
}
1763
1767
final EntityInitializerData entityInitializerData = (EntityInitializerData ) data ;
1764
1768
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 );
1770
1772
}
1771
1773
}
1772
1774
}
0 commit comments