TGViewer
Java Portal | Программирование Java Portal | Программирование @java_iibrary · 11.7K subscribers
Post #2574 1.3K
Валидатор загрузки связей в JPA

В статье показано, как программно проверять, каким образом JPA и Hibernate загружают связанные сущности — через JOIN или отдельными дополнительными запросами.

Проблема особенно заметна с FetchType.EAGER. Например, @ManyToOne и @OneToOne используют его по умолчанию, из-за чего Hibernate может незаметно генерировать дополнительные запросы и приводить к классической проблеме N+1.

Автор строит собственный валидатор поверх механизмов Hibernate Statistics и Event Listeners. Он позволяет прямо в тестах определить

→ какие связанные сущности были загружены
→ какие пришли через дополнительные SQL-запросы
→ какие были получены через JOIN

Например, можно проверить, что запрос неожиданно загрузил две PostComment отдельными запросами и ещё один Post через JOIN. После замены запроса на JOIN FETCH валидатор подтверждает, что дополнительные SQL-запросы исчезли.

По сути, это способ ловить проблемы со стратегией загрузки и N+1 ещё на уровне тестов, до того как они попадут в продакшен.

https://vladmihalcea.com/jpa-association-fetching-validator/

👉 Java Portal
Vlad Mihalcea JPA Association Fetching Validator - Vlad Mihalcea Learn how to implement a JPA Association Fetching Validator that asserts if associations are fetched using joins or secondary queries.
More from @java_iibrary
  1. Sep 21, 2026💡 Java/Spring: отдавайте предпочтение constructor injection вместо @Autowired для полей.…
  2. Sep 20, 2026Если бы пришлось заново начинать свой путь в Java в 2026 году, я бы придерживался такого r…
  3. Sep 20, 2026Вайбкодим «Полный путь разработки AI-агентов: от MCP до Agentic RAG» Образовательная прогр…
  4. Sep 20, 2026💡 Java: сортируйте с помощью Comparator.comparing() и забудьте про громоздкий compare() ✅…
  5. Sep 19, 202699% Java-разработчиков хотя бы раз допускали эту ошибку. Всё работает... пока однажды не п…
  6. Sep 19, 2026💡 Java: форматируйте код одинаково каждый раз ✅ Выберите единый code style и придерживайт…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →