Skip to content

Commit 199648a

Browse files
committed
HHH-19069 Call startLoading on entity sub-initializers only once
1 parent 9bb5862 commit 199648a

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
@@ -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

Comments
 (0)