Sobes.tech
Junior — Middle

Kun je een probleem beschrijven dat verband houdt met lazy loading van sessies in JPA?

sobes.tech AI

Antwoord van AI

Het probleem van lazy loading (lui laden) van sessies in JPA houdt verband met het feit dat gerelateerde entiteiten pas worden geladen uit de database bij de eerste toegang, en niet meteen bij het laden van de hoofdentiteit. Als de sessie (EntityManager) wordt gesloten voordat er toegang wordt verkregen tot de lazy geladen gegevens, ontstaat er een LazyInitializationException.

Bijvoorbeeld, als je een entiteit Order hebt met een lazy collectie items, en je laadt de bestelling in een methode, en vervolgens sluit je de sessie, dan krijg je een fout bij het proberen te verkrijgen van order.getItems() buiten de sessie.

Om dit probleem te voorkomen, kun je:

  • Eager loading gebruiken (EAGER), indien gerechtvaardigd.
  • De sessie openen tijdens de verwerking van de objecten (Open Session in View).
  • Expliciet de lazy collecties initialiseren binnen de sessie, bijvoorbeeld door Hibernate.initialize() aan te roepen.

Voorbeeld:

Order order = entityManager.find(Order.class, id);
Hibernate.initialize(order.getItems()); // initialisatie binnen de sessie
entityManager.close();
// Nu kan je veilig toegang krijgen tot order.getItems()