2424import org .hibernate .generator .values .GeneratedValues ;
2525import org .hibernate .id .IdentityGenerator ;
2626import org .hibernate .loader .ast .spi .BatchLoaderFactory ;
27+ import org .hibernate .loader .ast .spi .EntityBatchLoader ;
2728import org .hibernate .loader .ast .spi .MultiIdLoadOptions ;
2829import org .hibernate .mapping .PersistentClass ;
2930import org .hibernate .mapping .Property ;
@@ -80,11 +81,11 @@ public class ReactiveAbstractPersisterDelegate {
8081
8182 private static final Log LOG = LoggerFactory .make ( Log .class , MethodHandles .lookup () );
8283
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 ;
8586
86- private ReactiveSingleIdEntityLoader <Object > singleIdEntityLoader ;
87- private ReactiveMultiIdEntityLoader <Object > multiIdEntityLoader ;
87+ private ReactiveSingleIdEntityLoader <? > singleIdEntityLoader ;
88+ private ReactiveMultiIdEntityLoader <? > multiIdEntityLoader ;
8889
8990 private final EntityPersister entityDescriptor ;
9091
@@ -100,12 +101,12 @@ public ReactiveAbstractPersisterDelegate(
100101 entityDescriptor = entityPersister ;
101102 }
102103
103- public ReactiveSingleIdEntityLoader <Object > buildSingleIdEntityLoader () {
104+ public ReactiveSingleIdEntityLoader <? > buildSingleIdEntityLoader () {
104105 singleIdEntityLoader = singleIdEntityLoaderSupplier .get ();
105106 return singleIdEntityLoader ;
106107 }
107108
108- public ReactiveMultiIdEntityLoader <Object > buildMultiIdEntityLoader () {
109+ public ReactiveMultiIdEntityLoader <? > buildMultiIdEntityLoader () {
109110 multiIdEntityLoader = multiIdEntityLoaderSupplier .get ();
110111 return multiIdEntityLoader ;
111112 }
@@ -134,45 +135,58 @@ private static ReactiveMultiIdEntityLoader<Object> buildMultiIdEntityLoader(
134135 PersistentClass persistentClass ,
135136 SessionFactoryImplementor factory ) {
136137 return entityDescriptor .getIdentifierType () instanceof BasicType
137- && supportsSqlArrayType ( factory .getJdbcServices ().getDialect () )
138+ && supportsSqlArrayType ( factory .getJdbcServices ().getDialect () )
138139 ? new ReactiveMultiIdEntityLoaderArrayParam <>( entityDescriptor , factory )
139140 : new ReactiveMultiIdEntityLoaderStandard <>( entityDescriptor , persistentClass , factory );
140141 }
141142
142- private static ReactiveSingleIdEntityLoader <Object > buildSingleIdEntityLoader (
143+ private static ReactiveSingleIdEntityLoader <? > buildSingleIdEntityLoader (
143144 EntityPersister entityDescriptor ,
144145 PersistentClass bootDescriptor ,
145146 RuntimeModelCreationContext creationContext ,
146147 SessionFactoryImplementor factory ,
147148 String entityName ) {
148149 if ( bootDescriptor .getLoaderName () != null ) {
149150 // 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 );
155153 return new ReactiveSingleIdEntityLoaderProvidedQueryImpl <>( entityDescriptor , namedQueryMemento );
156154 }
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 );
162159 return createBatchingIdEntityLoader ( entityDescriptor , batchSize , factory );
163160 }
161+ else {
162+ return new ReactiveSingleIdEntityLoaderStandardImpl <>( entityDescriptor , loadQueryInfluencers );
163+ }
164164 }
165+ }
165166
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 ;
167180 }
168181
169- private static ReactiveSingleIdEntityLoader <Object > createBatchingIdEntityLoader (
182+ private static < T > ReactiveSingleIdEntityLoader <? > createBatchingIdEntityLoader (
170183 EntityMappingType entityDescriptor ,
171184 int domainBatchSize ,
172185 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 ;
176190 }
177191
178192 public CompletionStage <Void > processInsertGeneratedProperties (
@@ -235,7 +249,7 @@ protected ReactiveSingleUniqueKeyEntityLoader<Object> getReactiveUniqueKeyLoader
235249 );
236250 }
237251
238- public CompletionStage <Object > load (
252+ public CompletionStage <? > load (
239253 EntityPersister persister ,
240254 Object id ,
241255 Object optionalObject ,
@@ -254,7 +268,7 @@ public Generator reactive(Generator generator) {
254268 return generator instanceof IdentityGenerator ? new ReactiveIdentityGenerator () : generator ;
255269 }
256270
257- public CompletionStage <Object > loadEntityIdByNaturalId (
271+ public CompletionStage <? > loadEntityIdByNaturalId (
258272 Object [] orderedNaturalIdValues , LockOptions lockOptions , SharedSessionContractImplementor session ) {
259273 if ( LOG .isTraceEnabled () ) {
260274 LOG .tracef ( "Resolving natural-id [%s] to id : %s " ,
@@ -263,7 +277,7 @@ public CompletionStage<Object> loadEntityIdByNaturalId(
263277 );
264278 }
265279
266- return ( (ReactiveNaturalIdLoader ) entityDescriptor .getNaturalIdLoader () )
280+ return ( (ReactiveNaturalIdLoader <?> ) entityDescriptor .getNaturalIdLoader () )
267281 .resolveNaturalIdToId ( orderedNaturalIdValues , session );
268282 }
269283
@@ -322,13 +336,15 @@ public AttributeMapping buildPluralAttributeMapping(
322336 }
323337
324338 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 );
327344 }
328- if ( entityIdentifierMapping instanceof EmbeddedIdentifierMappingImpl ) {
329- return new ReactiveEmbeddedIdentifierMappingImpl ( ( EmbeddedIdentifierMappingImpl ) entityIdentifierMapping ) ;
345+ else {
346+ return entityIdentifierMapping ;
330347 }
331- return entityIdentifierMapping ;
332348 }
333349
334350 private static class ReactiveNonAggregatedIdentifierMappingImpl extends NonAggregatedIdentifierMappingImpl {
0 commit comments