Sobes.tech
Middle

Wird die JOIN FETCH-Operation bei Verwendung des Lazy Loading ausgeführt?

sobes.tech KI

Antwort von AI

Die Operation JOIN FETCH in JPA wird verwendet, um verwandte Entitäten eager zu laden, das heißt, sie lädt die verbundenen Objekte sofort zusammen mit der Hauptabfrage. Die Annotation oder Konfiguration des Lazy-Loadings (FetchType.LAZY) gibt an, dass die verbundenen Daten nur bei Bedarf geladen werden sollen.

Wenn in der Abfrage JOIN FETCH verwendet wird, werden die verbundenen Entitäten sofort geladen, unabhängig von dem, was in der Lazy-Loading-Annotation angegeben ist. Mit anderen Worten, JOIN FETCH überschreibt die Lade-Strategie und erzwingt ein eager Laden.

Daher wird bei Verwendung von JOIN FETCH die Operation ausgeführt und die verbundenen Daten werden sofort geladen, trotz des im Mapping festgelegten Lazy-Loadings.

Beispiel:

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();
// Kinder werden sofort geladen, auch wenn in Parent.children FetchType.LAZY eingestellt ist