Sobes.tech
Junior — Middle

Môžeš opísať problém súvisiaci s lazy loadingom relácií v JPA?

sobes.tech AI

Odpoveď od AI

Problém s lazy loadingom (oneskorené načítanie) relácií v JPA spočíva v tom, že súvisiace entity sa načítavajú z databázy iba pri prvom prístupe k nim, nie okamžite pri načítaní hlavnej entity. Ak je session (EntityManager) zatvorená skôr, než dôjde k prístupu k lazy načítaným dátam, vznikne výnimka LazyInitializationException.

Napríklad, ak máte entitu Order s lazy kolekciou items, a načítate objednávku v jednej metóde, a potom zatvoríte session, pokus o prístup k order.getItems() mimo session spôsobí chybu.

Aby ste tomuto problému predišli, môžete:

  • Použiť eager načítanie (EAGER), ak je to odôvodnené.
  • Otvoriť session počas práce s objektmi (Open Session in View).
  • Explicitne inicializovať lazy kolekcie vnútri session, napríklad volaním Hibernate.initialize().

Príklad:

Order order = entityManager.find(Order.class, id);
Hibernate.initialize(order.getItems()); // inicializácia vnútri session
entityManager.close();
// Teraz je možné bezpečne pristupovať k `order.getItems()`