@@ -109,12 +109,14 @@ public CollectionBatchLoaderArrayParam(
109109 .buildSelectTranslator ( getSessionFactory (), sqlSelect )
110110 .translate ( JdbcParameterBindings .NO_BINDINGS , QueryOptions .NONE );
111111 }
112+
112113 @ Override
113114 public PersistentCollection <?> load (Object keyBeingLoaded , SharedSessionContractImplementor session ) {
114115 final ForeignKeyDescriptor keyDescriptor = getLoadable ().getKeyDescriptor ();
115- if ( keyDescriptor .isEmbedded () ) {
116+ if ( keyDescriptor .isEmbedded ()
117+ || keyDescriptor .getKeyPart ().getSingleJdbcMapping ().getValueConverter () != null ) {
116118 assert keyDescriptor .getJdbcTypeCount () == 1 ;
117- return loadEmbeddable ( keyBeingLoaded , session , keyDescriptor );
119+ return loadWithConversion ( keyBeingLoaded , session , keyDescriptor );
118120 }
119121 else {
120122 return super .load ( keyBeingLoaded , session );
@@ -123,13 +125,13 @@ public PersistentCollection<?> load(Object keyBeingLoaded, SharedSessionContract
123125 }
124126
125127 @ AllowReflection
126- private PersistentCollection <?> loadEmbeddable (
128+ private PersistentCollection <?> loadWithConversion (
127129 Object keyBeingLoaded ,
128130 SharedSessionContractImplementor session ,
129131 ForeignKeyDescriptor keyDescriptor ) {
130132 if ( MULTI_KEY_LOAD_LOGGER .isTraceEnabled () ) {
131133 MULTI_KEY_LOAD_LOGGER .trace ( "Batch fetching collection: "
132- + collectionInfoString ( getLoadable (), keyBeingLoaded ) );
134+ + collectionInfoString ( getLoadable (), keyBeingLoaded ) );
133135 }
134136
135137 final int length = getDomainBatchSize ();
@@ -141,14 +143,14 @@ private PersistentCollection<?> loadEmbeddable(
141143 .getComponentType (),
142144 length
143145 );
144- final Object [] embeddedKeys = (Object []) newInstance ( keyDomainType , length );
146+ final Object [] domainKeys = (Object []) newInstance ( keyDomainType , length );
145147 session .getPersistenceContextInternal ().getBatchFetchQueue ()
146148 .collectBatchLoadableCollectionKeys (
147149 length ,
148150 (index , key ) ->
149151 keyDescriptor .forEachJdbcValue ( key , (i , value , jdbcMapping ) -> {
150152 keysToInitialize [index ] = value ;
151- embeddedKeys [index ] = key ;
153+ domainKeys [index ] = key ;
152154 }, session )
153155 ,
154156 keyBeingLoaded ,
@@ -163,7 +165,7 @@ private PersistentCollection<?> loadEmbeddable(
163165
164166 initializeKeys ( keyBeingLoaded , keys , session );
165167
166- for ( Object initializedKey : embeddedKeys ) {
168+ for ( Object initializedKey : domainKeys ) {
167169 if ( initializedKey != null ) {
168170 finishInitializingKey ( initializedKey , session );
169171 }
@@ -186,7 +188,7 @@ void initializeKeys(Object key, Object[] keysToInitialize, SharedSessionContract
186188 assert jdbcSelectOperation != null ;
187189 assert jdbcParameter != null ;
188190
189- final JdbcParameterBindings jdbcParameterBindings = new JdbcParameterBindingsImpl (1 );
191+ final JdbcParameterBindings jdbcParameterBindings = new JdbcParameterBindingsImpl ( 1 );
190192 jdbcParameterBindings .addBinding (
191193 jdbcParameter ,
192194 new JdbcParameterBindingImpl ( arraySqlTypedMapping .getJdbcMapping (), keysToInitialize )
@@ -219,27 +221,10 @@ void finishInitializingKeys(Object[] keys, SharedSessionContractImplementor sess
219221 }
220222
221223 @ Override
222- @ AllowReflection
223224 Object [] resolveKeysToInitialize (Object keyBeingLoaded , SharedSessionContractImplementor session ) {
224- final ForeignKeyDescriptor keyDescriptor = getLoadable ().getKeyDescriptor ();
225- if ( keyDescriptor .isEmbedded ()){
226- assert keyDescriptor .getJdbcTypeCount () == 1 ;
227- final int length = getDomainBatchSize ();
228- final Object [] keysToInitialize = (Object []) newInstance ( keyDescriptor .getSingleJdbcMapping ().getJdbcJavaType ().getJavaTypeClass (), length );
229- session .getPersistenceContextInternal ().getBatchFetchQueue ()
230- .collectBatchLoadableCollectionKeys (
231- length ,
232- (index , key ) ->
233- keyDescriptor .forEachJdbcValue ( key , (i , value , jdbcMapping ) -> {
234- keysToInitialize [index ] = value ;
235- }, session )
236- ,
237- keyBeingLoaded ,
238- getLoadable ()
239- );
240- // now trim down the array to the number of keys we found
241- return trimIdBatch ( length , keysToInitialize );
242- }
225+ assert !getLoadable ().getKeyDescriptor ().isEmbedded ()
226+ && getLoadable ().getKeyDescriptor ().getKeyPart ().getSingleJdbcMapping ().getValueConverter () == null
227+ : "Should use loadWithConversion() instead" ;
243228 return super .resolveKeysToInitialize ( keyBeingLoaded , session );
244229 }
245230}
0 commit comments