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 <noreply@anthropic.com>
This commit is contained in:
@@ -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<Document> 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();
|
||||
|
||||
Reference in New Issue
Block a user