Middle
Czy operacja JOIN FETCH zostanie wykonana przy użyciu leniwego ładowania?
sobes.tech AI
Odpowiedź od AI
Operacja JOIN FETCH w JPA służy do ładowania związanych encji w trybie eager, czyli od razu wraz z głównym zapytaniem. Adnotacja lub konfiguracja ładowania leniwego (FetchType.LAZY) wskazuje, że powiązane dane mają być ładowane tylko na żądanie.
Jeśli w zapytaniu używany jest JOIN FETCH, powiązane encje zostaną załadowane natychmiast, niezależnie od tego, co jest wskazane w adnotacji lazy loading. Innymi słowy, JOIN FETCH nadpisuje strategię ładowania i wymusza ładowanie eager.
W związku z tym, przy użyciu JOIN FETCH, operacja zostanie wykonana, a powiązane dane zostaną załadowane od razu, pomimo ustawienia lazy loading w mapowaniu.
Przykład:
String jpql = "SELECT p FROM Parent p JOIN FETCH p.children WHERE p.id = :id";
Parent parent = entityManager.createQuery(jpql, Parent.class)
.setParameter("id", 1L)
.getSingleResult();
// Dzieci zostaną załadowane od razu, nawet jeśli w Parent.children ustawiono FetchType.LAZY