24
24
import org .hibernate .generator .values .GeneratedValues ;
25
25
import org .hibernate .id .IdentityGenerator ;
26
26
import org .hibernate .loader .ast .spi .BatchLoaderFactory ;
27
+ import org .hibernate .loader .ast .spi .EntityBatchLoader ;
27
28
import org .hibernate .loader .ast .spi .MultiIdLoadOptions ;
28
29
import org .hibernate .mapping .PersistentClass ;
29
30
import org .hibernate .mapping .Property ;
@@ -80,11 +81,11 @@ public class ReactiveAbstractPersisterDelegate {
80
81
81
82
private static final Log LOG = LoggerFactory .make ( Log .class , MethodHandles .lookup () );
82
83
83
- private final Supplier <ReactiveSingleIdEntityLoader <Object >> singleIdEntityLoaderSupplier ;
84
- private final Supplier <ReactiveMultiIdEntityLoader <Object >> multiIdEntityLoaderSupplier ;
84
+ private final Supplier <ReactiveSingleIdEntityLoader <? >> singleIdEntityLoaderSupplier ;
85
+ private final Supplier <ReactiveMultiIdEntityLoader <? >> multiIdEntityLoaderSupplier ;
85
86
86
- private ReactiveSingleIdEntityLoader <Object > singleIdEntityLoader ;
87
- private ReactiveMultiIdEntityLoader <Object > multiIdEntityLoader ;
87
+ private ReactiveSingleIdEntityLoader <? > singleIdEntityLoader ;
88
+ private ReactiveMultiIdEntityLoader <? > multiIdEntityLoader ;
88
89
89
90
private final EntityPersister entityDescriptor ;
90
91
@@ -100,12 +101,12 @@ public ReactiveAbstractPersisterDelegate(
100
101
entityDescriptor = entityPersister ;
101
102
}
102
103
103
- public ReactiveSingleIdEntityLoader <Object > buildSingleIdEntityLoader () {
104
+ public ReactiveSingleIdEntityLoader <? > buildSingleIdEntityLoader () {
104
105
singleIdEntityLoader = singleIdEntityLoaderSupplier .get ();
105
106
return singleIdEntityLoader ;
106
107
}
107
108
108
- public ReactiveMultiIdEntityLoader <Object > buildMultiIdEntityLoader () {
109
+ public ReactiveMultiIdEntityLoader <? > buildMultiIdEntityLoader () {
109
110
multiIdEntityLoader = multiIdEntityLoaderSupplier .get ();
110
111
return multiIdEntityLoader ;
111
112
}
@@ -134,45 +135,58 @@ private static ReactiveMultiIdEntityLoader<Object> buildMultiIdEntityLoader(
134
135
PersistentClass persistentClass ,
135
136
SessionFactoryImplementor factory ) {
136
137
return entityDescriptor .getIdentifierType () instanceof BasicType
137
- && supportsSqlArrayType ( factory .getJdbcServices ().getDialect () )
138
+ && supportsSqlArrayType ( factory .getJdbcServices ().getDialect () )
138
139
? new ReactiveMultiIdEntityLoaderArrayParam <>( entityDescriptor , factory )
139
140
: new ReactiveMultiIdEntityLoaderStandard <>( entityDescriptor , persistentClass , factory );
140
141
}
141
142
142
- private static ReactiveSingleIdEntityLoader <Object > buildSingleIdEntityLoader (
143
+ private static ReactiveSingleIdEntityLoader <? > buildSingleIdEntityLoader (
143
144
EntityPersister entityDescriptor ,
144
145
PersistentClass bootDescriptor ,
145
146
RuntimeModelCreationContext creationContext ,
146
147
SessionFactoryImplementor factory ,
147
148
String entityName ) {
148
149
if ( bootDescriptor .getLoaderName () != null ) {
149
150
// We must resolve the named query on-demand through the boot model because it isn't initialized yet
150
- final NamedQueryMemento namedQueryMemento = factory .getQueryEngine ().getNamedObjectRepository ()
151
- .resolve ( factory , creationContext .getBootModel (), bootDescriptor .getLoaderName () );
152
- if ( namedQueryMemento == null ) {
153
- throw new IllegalArgumentException ( "Could not resolve named load-query [" + entityName + "] : " + bootDescriptor .getLoaderName () );
154
- }
151
+ final NamedQueryMemento <?> namedQueryMemento =
152
+ getNamedQueryMemento ( bootDescriptor , creationContext , factory , entityName );
155
153
return new ReactiveSingleIdEntityLoaderProvidedQueryImpl <>( entityDescriptor , namedQueryMemento );
156
154
}
157
-
158
- LoadQueryInfluencers loadQueryInfluencers = new LoadQueryInfluencers ( factory );
159
- if ( loadQueryInfluencers .effectivelyBatchLoadable ( entityDescriptor ) ) {
160
- final int batchSize = loadQueryInfluencers .effectiveBatchSize ( entityDescriptor );
161
- if ( batchSize > 1 ) {
155
+ else {
156
+ final LoadQueryInfluencers loadQueryInfluencers = new LoadQueryInfluencers ( factory );
157
+ if ( loadQueryInfluencers .effectivelyBatchLoadable ( entityDescriptor ) ) {
158
+ final int batchSize = loadQueryInfluencers .effectiveBatchSize ( entityDescriptor );
162
159
return createBatchingIdEntityLoader ( entityDescriptor , batchSize , factory );
163
160
}
161
+ else {
162
+ return new ReactiveSingleIdEntityLoaderStandardImpl <>( entityDescriptor , loadQueryInfluencers );
163
+ }
164
164
}
165
+ }
165
166
166
- return new ReactiveSingleIdEntityLoaderStandardImpl <>( entityDescriptor , new LoadQueryInfluencers ( factory ) );
167
+ private static NamedQueryMemento <?> getNamedQueryMemento (
168
+ PersistentClass bootDescriptor ,
169
+ RuntimeModelCreationContext creationContext ,
170
+ SessionFactoryImplementor factory ,
171
+ String entityName ) {
172
+ final NamedQueryMemento <?> namedQueryMemento =
173
+ factory .getQueryEngine ().getNamedObjectRepository ()
174
+ .resolve (factory , creationContext .getBootModel (), bootDescriptor .getLoaderName () );
175
+ if ( namedQueryMemento == null ) {
176
+ throw new IllegalArgumentException ( "Could not resolve named query '" + bootDescriptor .getLoaderName ()
177
+ + "' for loading entity '" + entityName + "'" );
178
+ }
179
+ return namedQueryMemento ;
167
180
}
168
181
169
- private static ReactiveSingleIdEntityLoader <Object > createBatchingIdEntityLoader (
182
+ private static < T > ReactiveSingleIdEntityLoader <? > createBatchingIdEntityLoader (
170
183
EntityMappingType entityDescriptor ,
171
184
int domainBatchSize ,
172
185
SessionFactoryImplementor factory ) {
173
- return (ReactiveSingleIdEntityLoader ) factory .getServiceRegistry ()
174
- .getService ( BatchLoaderFactory .class )
175
- .createEntityBatchLoader ( domainBatchSize , entityDescriptor , factory );
186
+ final EntityBatchLoader <?> batchLoader =
187
+ factory .getServiceRegistry ().requireService ( BatchLoaderFactory .class )
188
+ .createEntityBatchLoader ( domainBatchSize , entityDescriptor , factory );
189
+ return (ReactiveSingleIdEntityLoader <?>) batchLoader ;
176
190
}
177
191
178
192
public CompletionStage <Void > processInsertGeneratedProperties (
@@ -235,7 +249,7 @@ protected ReactiveSingleUniqueKeyEntityLoader<Object> getReactiveUniqueKeyLoader
235
249
);
236
250
}
237
251
238
- public CompletionStage <Object > load (
252
+ public CompletionStage <? > load (
239
253
EntityPersister persister ,
240
254
Object id ,
241
255
Object optionalObject ,
@@ -254,7 +268,7 @@ public Generator reactive(Generator generator) {
254
268
return generator instanceof IdentityGenerator ? new ReactiveIdentityGenerator () : generator ;
255
269
}
256
270
257
- public CompletionStage <Object > loadEntityIdByNaturalId (
271
+ public CompletionStage <? > loadEntityIdByNaturalId (
258
272
Object [] orderedNaturalIdValues , LockOptions lockOptions , SharedSessionContractImplementor session ) {
259
273
if ( LOG .isTraceEnabled () ) {
260
274
LOG .tracef ( "Resolving natural-id [%s] to id : %s " ,
@@ -263,7 +277,7 @@ public CompletionStage<Object> loadEntityIdByNaturalId(
263
277
);
264
278
}
265
279
266
- return ( (ReactiveNaturalIdLoader ) entityDescriptor .getNaturalIdLoader () )
280
+ return ( (ReactiveNaturalIdLoader <?> ) entityDescriptor .getNaturalIdLoader () )
267
281
.resolveNaturalIdToId ( orderedNaturalIdValues , session );
268
282
}
269
283
@@ -322,13 +336,15 @@ public AttributeMapping buildPluralAttributeMapping(
322
336
}
323
337
324
338
public EntityIdentifierMapping convertEntityIdentifierMapping (EntityIdentifierMapping entityIdentifierMapping ) {
325
- if ( entityIdentifierMapping instanceof NonAggregatedIdentifierMappingImpl ) {
326
- return new ReactiveNonAggregatedIdentifierMappingImpl ( (NonAggregatedIdentifierMappingImpl ) entityIdentifierMapping );
339
+ if ( entityIdentifierMapping instanceof NonAggregatedIdentifierMappingImpl nonAggregatedIdentifierMapping ) {
340
+ return new ReactiveNonAggregatedIdentifierMappingImpl (nonAggregatedIdentifierMapping );
341
+ }
342
+ else if ( entityIdentifierMapping instanceof EmbeddedIdentifierMappingImpl embeddedIdentifierMapping ) {
343
+ return new ReactiveEmbeddedIdentifierMappingImpl (embeddedIdentifierMapping );
327
344
}
328
- if ( entityIdentifierMapping instanceof EmbeddedIdentifierMappingImpl ) {
329
- return new ReactiveEmbeddedIdentifierMappingImpl ( ( EmbeddedIdentifierMappingImpl ) entityIdentifierMapping ) ;
345
+ else {
346
+ return entityIdentifierMapping ;
330
347
}
331
- return entityIdentifierMapping ;
332
348
}
333
349
334
350
private static class ReactiveNonAggregatedIdentifierMappingImpl extends NonAggregatedIdentifierMappingImpl {
0 commit comments