@@ -254,82 +254,63 @@ public CompletionStage<Void> reactiveResolveInstance(EntityInitializerData origi
254254 }
255255 final RowProcessingState rowProcessingState = data .getRowProcessingState ();
256256 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 ();
296263 }
297- postResolveInstance ( data );
298- return voidFuture ();
299- }
300- } );
264+ resolveEntityKey ( data , id );
265+ return postAssembleId ( rowProcessingState , data );
266+ } );
267+ }
268+ return postAssembleId ( rowProcessingState , data );
301269 }
302270
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 ();
329285 }
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 ) );
331311 }
332312
313+ // We could move this method in ORM
333314 private void postResolveInstance (ReactiveEntityInitializerData data ) {
334315 if ( data .getInstance () != null ) {
335316 upgradeLockMode ( data );
0 commit comments