55package org .hibernate .loader .ast .internal ;
66
77import org .hibernate .collection .spi .PersistentCollection ;
8- import org .hibernate .engine .spi .CollectionEntry ;
98import org .hibernate .engine .spi .CollectionKey ;
109import org .hibernate .engine .spi .LoadQueryInfluencers ;
11- import org .hibernate .engine .spi .PersistenceContext ;
1210import org .hibernate .engine .spi .SessionFactoryImplementor ;
1311import org .hibernate .engine .spi .SharedSessionContractImplementor ;
1412import org .hibernate .internal .build .AllowReflection ;
1513import org .hibernate .loader .ast .spi .CollectionBatchLoader ;
1614import org .hibernate .metamodel .mapping .NonAggregatedIdentifierMapping ;
1715import org .hibernate .metamodel .mapping .PluralAttributeMapping ;
1816import org .hibernate .metamodel .mapping .ValuedModelPart ;
19- import org .hibernate .metamodel .mapping .internal .IdClassEmbeddable ;
2017import org .hibernate .sql .results .internal .ResultsHelper ;
2118
22- import java .lang .reflect .Array ;
2319
2420import static org .hibernate .loader .ast .internal .MultiKeyLoadHelper .hasSingleId ;
2521import static org .hibernate .loader .ast .internal .MultiKeyLoadHelper .trimIdBatch ;
@@ -78,63 +74,57 @@ public int getKeyJdbcCount() {
7874
7975 abstract void initializeKeys (Object key , Object [] keysToInitialize , SharedSessionContractImplementor session );
8076
77+ private CollectionKey collectionKey (Object key ) {
78+ return new CollectionKey ( getLoadable ().getCollectionDescriptor (), key );
79+ }
80+
8181 @ Override
8282 public PersistentCollection <?> load (Object key , SharedSessionContractImplementor session ) {
8383 if ( MULTI_KEY_LOAD_LOGGER .isTraceEnabled () ) {
84- MULTI_KEY_LOAD_LOGGER .trace ( "Batch fetching collection: "
85- + collectionInfoString ( getLoadable (), key ) );
84+ MULTI_KEY_LOAD_LOGGER .batchFetchingCollection (
85+ collectionInfoString ( getLoadable (), key ) );
8686 }
8787
88- final Object [] keys = resolveKeysToInitialize ( key , session );
89-
88+ final var keys = resolveKeysToInitialize ( key , session );
9089 if ( hasSingleId ( keys ) ) {
9190 return singleKeyLoader .load ( key , session );
9291 }
93-
9492 initializeKeys ( key , keys , session );
95-
9693 finishInitializingKeys ( keys , session );
9794
98- final CollectionKey collectionKey = new CollectionKey ( getLoadable ().getCollectionDescriptor (), key );
99- return session .getPersistenceContext ().getCollection ( collectionKey );
95+ return session .getPersistenceContext ().getCollection ( collectionKey ( key ) );
10096 }
10197
10298 abstract void finishInitializingKeys (Object [] key , SharedSessionContractImplementor session );
10399
104100 protected void finishInitializingKey (Object key , SharedSessionContractImplementor session ) {
105- if ( key == null ) {
106- return ;
107- }
108-
109- if ( MULTI_KEY_LOAD_LOGGER .isTraceEnabled () ) {
110- MULTI_KEY_LOAD_LOGGER .trace ( "Finishing initializing batch-fetched collection: "
111- + collectionInfoString ( attributeMapping , key ) );
112- }
101+ if ( key != null ) {
102+ if ( MULTI_KEY_LOAD_LOGGER .isTraceEnabled () ) {
103+ MULTI_KEY_LOAD_LOGGER .finishingInitializingBatchFetchedCollection (
104+ collectionInfoString ( attributeMapping , key ) );
105+ }
113106
114- final PersistenceContext persistenceContext = session .getPersistenceContext ();
115- final CollectionKey collectionKey = new CollectionKey ( getLoadable (). getCollectionDescriptor (), key );
116- final PersistentCollection <?> collection = persistenceContext . getCollection ( collectionKey );
117- if ( ! collection . wasInitialized () ) {
118- final CollectionEntry entry = persistenceContext . getCollectionEntry ( collection );
119- collection . initializeEmptyCollection ( entry . getLoadedPersister () );
120- ResultsHelper . finalizeCollectionLoading (
121- persistenceContext ,
122- entry . getLoadedPersister () ,
123- collection ,
124- key ,
125- true
126- );
107+ final var persistenceContext = session .getPersistenceContext ();
108+ final var collection = persistenceContext . getCollection ( collectionKey ( key ) );
109+ if ( ! collection . wasInitialized () ) {
110+ final var entry = persistenceContext . getCollectionEntry ( collection );
111+ collection . initializeEmptyCollection ( entry . getLoadedPersister () );
112+ ResultsHelper . finalizeCollectionLoading (
113+ persistenceContext ,
114+ entry . getLoadedPersister () ,
115+ collection ,
116+ key ,
117+ true
118+ );
119+ }
127120 }
128-
129121 }
130122
131123 @ AllowReflection
132124 Object [] resolveKeysToInitialize (Object keyBeingLoaded , SharedSessionContractImplementor session ) {
133125 final int length = getDomainBatchSize ();
134- final Object [] keysToInitialize = (Object []) Array .newInstance (
135- getKeyType ( getLoadable ().getKeyDescriptor ().getKeyPart () ),
136- length
137- );
126+ final var keyType = getKeyType ( getLoadable ().getKeyDescriptor ().getKeyPart () );
127+ final Object [] keysToInitialize = new Object [length ];
138128 session .getPersistenceContextInternal ().getBatchFetchQueue ()
139129 .collectBatchLoadableCollectionKeys (
140130 length ,
@@ -148,13 +138,11 @@ Object[] resolveKeysToInitialize(Object keyBeingLoaded, SharedSessionContractImp
148138
149139 protected Class <?> getKeyType (ValuedModelPart keyPart ) {
150140 if ( keyPart instanceof NonAggregatedIdentifierMapping nonAggregatedIdentifierMapping ) {
151- final IdClassEmbeddable idClassEmbeddable = nonAggregatedIdentifierMapping .getIdClassEmbeddable ();
141+ final var idClassEmbeddable = nonAggregatedIdentifierMapping .getIdClassEmbeddable ();
152142 if ( idClassEmbeddable != null ) {
153143 return idClassEmbeddable .getMappedJavaType ().getJavaTypeClass ();
154144 }
155145 }
156146 return keyPart .getJavaType ().getJavaTypeClass ();
157147 }
158-
159-
160148}
0 commit comments