From d663ba87b0178ab441a50420044b4c80393b86a8 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sat, 28 Mar 2026 20:13:54 +0100 Subject: [PATCH] fix(#148): flush entity manager after @Modifying queries in PersonRepositoryTest Native queries bypass the JPA first-level cache; flush+clear is required before reloading entities to see the updated state in the same transaction. Co-Authored-By: Claude Sonnet 4.6 --- .../repository/PersonRepositoryTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/backend/src/test/java/org/raddatz/familienarchiv/repository/PersonRepositoryTest.java b/backend/src/test/java/org/raddatz/familienarchiv/repository/PersonRepositoryTest.java index 7f81dd15..69696fdb 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/repository/PersonRepositoryTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/repository/PersonRepositoryTest.java @@ -11,6 +11,8 @@ import org.springframework.boot.jdbc.test.autoconfigure.AutoConfigureTestDatabas import org.springframework.boot.data.jpa.test.autoconfigure.DataJpaTest; import org.springframework.context.annotation.Import; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; import java.util.List; import java.util.Optional; import java.util.Set; @@ -28,6 +30,9 @@ class PersonRepositoryTest { @Autowired private DocumentRepository documentRepository; + @PersistenceContext + private EntityManager entityManager; + // ─── save and findById ──────────────────────────────────────────────────── @Test @@ -230,6 +235,8 @@ class PersonRepositoryTest { .sender(source).build()); personRepository.reassignSender(source.getId(), target.getId()); + entityManager.flush(); + entityManager.clear(); List docs = documentRepository.findBySenderId(target.getId()); assertThat(docs).hasSize(1); @@ -250,6 +257,8 @@ class PersonRepositoryTest { .sender(sender).receivers(Set.of(source)).build()); personRepository.insertMissingReceiverReference(source.getId(), target.getId()); + entityManager.flush(); + entityManager.clear(); Document reloaded = documentRepository.findById(doc.getId()).orElseThrow(); assertThat(reloaded.getReceivers()) @@ -270,6 +279,8 @@ class PersonRepositoryTest { .sender(sender).receivers(Set.of(source, target)).build()); personRepository.insertMissingReceiverReference(source.getId(), target.getId()); + entityManager.flush(); + entityManager.clear(); Document reloaded = documentRepository.findById(doc.getId()).orElseThrow(); long targetCount = reloaded.getReceivers().stream() @@ -294,6 +305,8 @@ class PersonRepositoryTest { .sender(sender).receivers(Set.of(toDelete)).build()); personRepository.deleteReceiverReferences(toDelete.getId()); + entityManager.flush(); + entityManager.clear(); assertThat(documentRepository.findById(doc1.getId()).orElseThrow().getReceivers()).isEmpty(); assertThat(documentRepository.findById(doc2.getId()).orElseThrow().getReceivers()).isEmpty();