fix(transcription): eliminate N+1 lazy load in propagation listener
Switch from findByMentionedPersons_PersonId (derived query, returns blocks with LAZY mentionedPersons) to findByPersonIdWithMentionsFetched (JOIN FETCH, loads full collections in one round-trip). 200-block propagation: from 201 queries to 2. Add @Transactional comment documenting join-transaction semantics. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -35,10 +35,10 @@ public class PersonMentionPropagationListener {
|
|||||||
private final TranscriptionBlockRepository blockRepository;
|
private final TranscriptionBlockRepository blockRepository;
|
||||||
|
|
||||||
@EventListener
|
@EventListener
|
||||||
@Transactional
|
@Transactional // Joins publisher's transaction — async switch requires @TransactionalEventListener(AFTER_COMMIT)
|
||||||
public void onPersonDisplayNameChanged(PersonDisplayNameChangedEvent event) {
|
public void onPersonDisplayNameChanged(PersonDisplayNameChangedEvent event) {
|
||||||
List<TranscriptionBlock> blocks =
|
List<TranscriptionBlock> blocks =
|
||||||
blockRepository.findByMentionedPersons_PersonId(event.personId());
|
blockRepository.findByPersonIdWithMentionsFetched(event.personId());
|
||||||
if (blocks.isEmpty()) {
|
if (blocks.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user