diff --git a/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentRepositoryTest.java b/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentRepositoryTest.java index fee22881..4b2d1b70 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentRepositoryTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentRepositoryTest.java @@ -586,6 +586,32 @@ class DocumentRepositoryTest { .isLessThanOrEqualTo(5); } + @Test + void findAll_withSpecOnly_appliesEntityGraphInAtMostFiveStatements() { + Person sender = personRepository.save(Person.builder().firstName("Otto").lastName("SoSender").build()); + Tag tag = tagRepository.save(Tag.builder().name("SoTag").build()); + for (int i = 0; i < 5; i++) { + documentRepository.save(Document.builder() + .title("SoDoc " + i).originalFilename("sodoc_" + i + ".pdf") + .status(DocumentStatus.UPLOADED) + .sender(sender) + .tags(new HashSet<>(Set.of(tag))) + .build()); + } + entityManager.flush(); + entityManager.clear(); + Statistics stats = entityManagerFactory.unwrap(SessionFactory.class).getStatistics(); + stats.setStatisticsEnabled(true); + stats.clear(); + + Specification allDocs = (root, query, cb) -> null; + documentRepository.findAll(allDocs); + + assertThat(stats.getPrepareStatementCount()) + .as("@EntityGraph(Document.list) via findAll(Spec) must not N+1 sender for 5 docs") + .isLessThanOrEqualTo(5); + } + // ─── seeding helpers ───────────────────────────────────────────────────── private Document uploaded(String title) {