@@ -254,82 +254,63 @@ public CompletionStage<Void> reactiveResolveInstance(EntityInitializerData origi
254
254
}
255
255
final RowProcessingState rowProcessingState = data .getRowProcessingState ();
256
256
data .setState ( State .RESOLVED );
257
- return assembleId ( data , rowProcessingState )
258
- .thenCompose ( unused -> {
259
- if ( data .getState () == State .MISSING ) {
260
- return voidFuture ();
261
- }
262
- else {
263
- final PersistenceContext persistenceContext = rowProcessingState
264
- .getSession ().getPersistenceContextInternal ();
265
- data .setEntityHolder ( persistenceContext .claimEntityHolderIfPossible (
266
- data .getEntityKey (),
267
- null ,
268
- rowProcessingState .getJdbcValuesSourceProcessingState (),
269
- this
270
- ) );
271
-
272
- if ( useEmbeddedIdentifierInstanceAsEntity ( data ) ) {
273
- data .setEntityInstanceForNotify ( rowProcessingState .getEntityId () );
274
- data .setInstance ( data .getEntityInstanceForNotify () );
275
- }
276
- else {
277
- return reactiveResolveEntityInstance1 ( data )
278
- .thenAccept ( v -> {
279
- if ( data .getUniqueKeyAttributePath () != null ) {
280
- final SharedSessionContractImplementor session = rowProcessingState .getSession ();
281
- final EntityPersister concreteDescriptor = getConcreteDescriptor ( data );
282
- final EntityUniqueKey euk = new EntityUniqueKey (
283
- concreteDescriptor .getEntityName (),
284
- data .getUniqueKeyAttributePath (),
285
- rowProcessingState .getEntityUniqueKey (),
286
- data .getUniqueKeyPropertyTypes ()[concreteDescriptor .getSubclassId ()],
287
- session .getFactory ()
288
- );
289
- session .getPersistenceContextInternal ().addEntity (
290
- euk ,
291
- data .getInstance ()
292
- );
293
- }
294
- postResolveInstance ( data );
295
- } );
257
+ if ( data .getEntityKey () == null ) {
258
+ return assembleId ( rowProcessingState )
259
+ .thenCompose ( id -> {
260
+ if ( id == null ) {
261
+ setMissing ( data );
262
+ return voidFuture ();
296
263
}
297
- postResolveInstance ( data );
298
- return voidFuture ();
299
- }
300
- } );
264
+ resolveEntityKey ( data , id );
265
+ return postAssembleId ( rowProcessingState , data );
266
+ } );
267
+ }
268
+ return postAssembleId ( rowProcessingState , data );
301
269
}
302
270
303
- private CompletionStage <Void > assembleId (
304
- ReactiveEntityInitializerData data ,
305
- RowProcessingState rowProcessingState ) {
306
- if ( data .getEntityKey () == null ) {
307
- DomainResultAssembler <?> identifierAssembler = getIdentifierAssembler ();
308
- assert identifierAssembler != null ;
309
- if ( identifierAssembler instanceof ReactiveDomainResultsAssembler <?> reactiveAssembler ) {
310
- return reactiveAssembler
311
- .reactiveAssemble ( (ReactiveRowProcessingState ) rowProcessingState )
312
- .thenAccept ( id -> {
313
- if ( id == null ) {
314
- setMissing ( data );
315
- return ;
316
- }
317
- resolveEntityKey ( data , id );
318
- } );
319
- }
320
- else {
321
- final Object id = identifierAssembler .assemble ( rowProcessingState );
322
- if ( id == null ) {
323
- setMissing ( data );
324
- return voidFuture ();
325
- }
326
- resolveEntityKey ( data , id );
327
- return voidFuture ();
328
- }
271
+ private CompletionStage <Void > postAssembleId (RowProcessingState rowProcessingState , ReactiveEntityInitializerData data ) {
272
+ final PersistenceContext persistenceContext = rowProcessingState .getSession ().getPersistenceContextInternal ();
273
+ data .setEntityHolder ( persistenceContext .claimEntityHolderIfPossible (
274
+ data .getEntityKey (),
275
+ null ,
276
+ rowProcessingState .getJdbcValuesSourceProcessingState (),
277
+ this
278
+ ) );
279
+
280
+ if ( useEmbeddedIdentifierInstanceAsEntity ( data ) ) {
281
+ data .setEntityInstanceForNotify ( rowProcessingState .getEntityId () );
282
+ data .setInstance ( data .getEntityInstanceForNotify () );
283
+ postResolveInstance ( data );
284
+ return voidFuture ();
329
285
}
330
- return voidFuture ();
286
+
287
+ return reactiveResolveEntityInstance1 ( data )
288
+ .thenAccept ( v -> {
289
+ if ( data .getUniqueKeyAttributePath () != null ) {
290
+ final SharedSessionContractImplementor session = rowProcessingState .getSession ();
291
+ final EntityPersister concreteDescriptor = getConcreteDescriptor ( data );
292
+ final EntityUniqueKey euk = new EntityUniqueKey (
293
+ concreteDescriptor .getEntityName (),
294
+ data .getUniqueKeyAttributePath (),
295
+ rowProcessingState .getEntityUniqueKey (),
296
+ data .getUniqueKeyPropertyTypes ()[concreteDescriptor .getSubclassId ()],
297
+ session .getFactory ()
298
+ );
299
+ session .getPersistenceContextInternal ().addEntity ( euk , data .getInstance () );
300
+ }
301
+ postResolveInstance ( data );
302
+ } );
303
+ }
304
+
305
+ private CompletionStage <?> assembleId (RowProcessingState rowProcessingState ) {
306
+ final DomainResultAssembler <?> identifierAssembler = getIdentifierAssembler ();
307
+ assert identifierAssembler != null ;
308
+ return identifierAssembler instanceof ReactiveDomainResultsAssembler <?> reactiveAssembler
309
+ ? reactiveAssembler .reactiveAssemble ( (ReactiveRowProcessingState ) rowProcessingState )
310
+ : completedFuture ( identifierAssembler .assemble ( rowProcessingState ) );
331
311
}
332
312
313
+ // We could move this method in ORM
333
314
private void postResolveInstance (ReactiveEntityInitializerData data ) {
334
315
if ( data .getInstance () != null ) {
335
316
upgradeLockMode ( data );
0 commit comments