Skip to content

Commit 58e5bac

Browse files
committed
[#1517] Fix DefaultReactiveDeleteEventListener
It was executing some operations in parallel because the stages were created in ahead of time.
1 parent 5277b33 commit 58e5bac

File tree

1 file changed

+49
-53
lines changed

1 file changed

+49
-53
lines changed

hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveDeleteEventListener.java

Lines changed: 49 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -339,59 +339,55 @@ protected CompletionStage<Void> deleteEntity(
339339
persistenceContext.setEntryStatus( entityEntry, Status.DELETED );
340340
final EntityKey key = session.generateEntityKey( entityEntry.getId(), persister );
341341

342-
CompletionStage<Void> beforeDelete = cascadeBeforeDelete( session, persister, entity, entityEntry, transientEntities );
343-
344-
CompletionStage<Void> nullifyAndAction = new ForeignKeys.Nullifier(
345-
entity,
346-
true,
347-
false,
348-
session,
349-
persister
350-
).nullifyTransientReferences( entityEntry.getDeletedState() )
351-
.thenAccept( v -> {
352-
new Nullability( session ).checkNullability(
353-
entityEntry.getDeletedState(),
354-
persister,
355-
Nullability.NullabilityCheckType.DELETE
356-
);
357-
persistenceContext.registerNullifiableEntityKey( key );
358-
359-
ReactiveActionQueue actionQueue = actionQueue( session );
360-
361-
if ( isOrphanRemovalBeforeUpdates ) {
362-
// TODO: The removeOrphan concept is a temporary "hack" for HHH-6484. This should be removed once action/task
363-
// ordering is improved.
364-
actionQueue.addAction(
365-
new ReactiveOrphanRemovalAction(
366-
entityEntry.getId(),
367-
deletedState,
368-
version,
369-
entity,
370-
persister,
371-
isCascadeDeleteEnabled,
372-
session
373-
)
374-
);
375-
}
376-
else {
377-
// Ensures that containing deletions happen before sub-deletions
378-
actionQueue.addAction(
379-
new ReactiveEntityDeleteAction(
380-
entityEntry.getId(),
381-
deletedState,
382-
version,
383-
entity,
384-
persister,
385-
isCascadeDeleteEnabled,
386-
session
387-
)
388-
);
389-
}
390-
} );
391-
392-
CompletionStage<Void> afterDelete = cascadeAfterDelete( session, persister, entity, transientEntities );
393-
394-
return beforeDelete.thenCompose( v -> nullifyAndAction ).thenCompose( v -> afterDelete );
342+
return cascadeBeforeDelete( session, persister, entity, entityEntry, transientEntities )
343+
.thenCompose( v -> new ForeignKeys.Nullifier(
344+
entity,
345+
true,
346+
false,
347+
session,
348+
persister
349+
).nullifyTransientReferences( entityEntry.getDeletedState() )
350+
.thenAccept( vv -> {
351+
new Nullability( session ).checkNullability(
352+
entityEntry.getDeletedState(),
353+
persister,
354+
Nullability.NullabilityCheckType.DELETE
355+
);
356+
persistenceContext.registerNullifiableEntityKey( key );
357+
358+
ReactiveActionQueue actionQueue = actionQueue( session );
359+
360+
if ( isOrphanRemovalBeforeUpdates ) {
361+
// TODO: The removeOrphan concept is a temporary "hack" for HHH-6484. This should be removed once action/task
362+
// ordering is improved.
363+
actionQueue.addAction(
364+
new ReactiveOrphanRemovalAction(
365+
entityEntry.getId(),
366+
deletedState,
367+
version,
368+
entity,
369+
persister,
370+
isCascadeDeleteEnabled,
371+
session
372+
)
373+
);
374+
}
375+
else {
376+
// Ensures that containing deletions happen before sub-deletions
377+
actionQueue.addAction(
378+
new ReactiveEntityDeleteAction(
379+
entityEntry.getId(),
380+
deletedState,
381+
version,
382+
entity,
383+
persister,
384+
isCascadeDeleteEnabled,
385+
session
386+
)
387+
);
388+
}
389+
} ) )
390+
.thenCompose( v -> cascadeAfterDelete( session, persister, entity, transientEntities ) );
395391
}
396392

397393
private ReactiveActionQueue actionQueue(EventSource session) {

0 commit comments

Comments
 (0)