Skip to content

Commit e3b5258

Browse files
committed
HHH-19069 Call startLoading on entity sub-initializers only once
1 parent f83a721 commit e3b5258

File tree

1 file changed

+19
-17
lines changed

1 file changed

+19
-17
lines changed

hibernate-core/src/main/java/org/hibernate/sql/results/graph/entity/internal/EntityInitializerImpl.java

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)