Emit postFlush
events as the very last thing in UoW::flush()
#10874
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR moves the
postFlush
event dispatching after final clean-up steps inUnitOfWork::commit()
.The idea is that at this time,
commit()
is "as done as it gets", and it might be possible to callEntityManager::flush()
again from event listeners – we'd return from that method on the very next line, and everything would be in the same state if users dediced to callflush()
again themselves.Obviously, infinite recursion is one thing either the ORM or users would need to think about.
The intent is to make it somehow possible for users to have event listeners that get notified e. g. through
postPersist
to prepare "cascading" changes. These changes could be collected and applied in apostFlush
listener, which might then callflush()
again.This sparked off from #10869, where the reporting user is calling
flush()
even frompostPersist
– a questionable practice, probably never endorsed but it "somehow worked" until 2.16.0.postFlush
listeners inspect UoW state through methods likeisSchedulesForInsert
orgetEntityChangeSet
, this information will no longer available with this change. → Maybe we need an additional event?