5
5
package org .hibernate .loader .ast .internal ;
6
6
7
7
import org .hibernate .collection .spi .PersistentCollection ;
8
- import org .hibernate .engine .spi .CollectionEntry ;
9
8
import org .hibernate .engine .spi .CollectionKey ;
10
9
import org .hibernate .engine .spi .LoadQueryInfluencers ;
11
- import org .hibernate .engine .spi .PersistenceContext ;
12
10
import org .hibernate .engine .spi .SessionFactoryImplementor ;
13
11
import org .hibernate .engine .spi .SharedSessionContractImplementor ;
14
12
import org .hibernate .internal .build .AllowReflection ;
15
13
import org .hibernate .loader .ast .spi .CollectionBatchLoader ;
16
14
import org .hibernate .metamodel .mapping .NonAggregatedIdentifierMapping ;
17
15
import org .hibernate .metamodel .mapping .PluralAttributeMapping ;
18
16
import org .hibernate .metamodel .mapping .ValuedModelPart ;
19
- import org .hibernate .metamodel .mapping .internal .IdClassEmbeddable ;
20
17
import org .hibernate .sql .results .internal .ResultsHelper ;
21
18
22
- import java .lang .reflect .Array ;
23
19
24
20
import static org .hibernate .loader .ast .internal .MultiKeyLoadHelper .hasSingleId ;
25
21
import static org .hibernate .loader .ast .internal .MultiKeyLoadHelper .trimIdBatch ;
@@ -78,63 +74,57 @@ public int getKeyJdbcCount() {
78
74
79
75
abstract void initializeKeys (Object key , Object [] keysToInitialize , SharedSessionContractImplementor session );
80
76
77
+ private CollectionKey collectionKey (Object key ) {
78
+ return new CollectionKey ( getLoadable ().getCollectionDescriptor (), key );
79
+ }
80
+
81
81
@ Override
82
82
public PersistentCollection <?> load (Object key , SharedSessionContractImplementor session ) {
83
83
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 ) );
86
86
}
87
87
88
- final Object [] keys = resolveKeysToInitialize ( key , session );
89
-
88
+ final var keys = resolveKeysToInitialize ( key , session );
90
89
if ( hasSingleId ( keys ) ) {
91
90
return singleKeyLoader .load ( key , session );
92
91
}
93
-
94
92
initializeKeys ( key , keys , session );
95
-
96
93
finishInitializingKeys ( keys , session );
97
94
98
- final CollectionKey collectionKey = new CollectionKey ( getLoadable ().getCollectionDescriptor (), key );
99
- return session .getPersistenceContext ().getCollection ( collectionKey );
95
+ return session .getPersistenceContext ().getCollection ( collectionKey ( key ) );
100
96
}
101
97
102
98
abstract void finishInitializingKeys (Object [] key , SharedSessionContractImplementor session );
103
99
104
100
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
+ }
113
106
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
+ }
127
120
}
128
-
129
121
}
130
122
131
123
@ AllowReflection
132
124
Object [] resolveKeysToInitialize (Object keyBeingLoaded , SharedSessionContractImplementor session ) {
133
125
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 ];
138
128
session .getPersistenceContextInternal ().getBatchFetchQueue ()
139
129
.collectBatchLoadableCollectionKeys (
140
130
length ,
@@ -148,13 +138,11 @@ Object[] resolveKeysToInitialize(Object keyBeingLoaded, SharedSessionContractImp
148
138
149
139
protected Class <?> getKeyType (ValuedModelPart keyPart ) {
150
140
if ( keyPart instanceof NonAggregatedIdentifierMapping nonAggregatedIdentifierMapping ) {
151
- final IdClassEmbeddable idClassEmbeddable = nonAggregatedIdentifierMapping .getIdClassEmbeddable ();
141
+ final var idClassEmbeddable = nonAggregatedIdentifierMapping .getIdClassEmbeddable ();
152
142
if ( idClassEmbeddable != null ) {
153
143
return idClassEmbeddable .getMappedJavaType ().getJavaTypeClass ();
154
144
}
155
145
}
156
146
return keyPart .getJavaType ().getJavaTypeClass ();
157
147
}
158
-
159
-
160
148
}
0 commit comments