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()`