Junior — Middle
JPA'da tembel yükleme ile ilgili bir soruyu tanımlayabilir misiniz?
sobes.tech yapay zeka
AI'dan gelen yanıt
JPA'da tembel yükleme (lazy loading) oturumlarındaki sorun, ilişkili varlıkların yalnızca ilk erişimde veritabanından yüklenmesi ve ana varlık yüklenirken hemen yüklenmemesidir. Oturum (EntityManager) kapanmadan önce tembel yüklenmiş verilere erişilmeye çalışıldığında, LazyInitializationException hatası oluşur.
Örneğin, Order adlı bir varlık ve onun tembel koleksiyonu items varsa, ve siparişi bir yöntemde yüklediyseniz, sonra oturumu kapatırsanız, oturum dışında order.getItems() çağrısı yaparken hata alırsınız.
Bu sorunu önlemek için:
- Gerekliyse, tembel yükleme yerine eager yükleme (EAGER) kullanabilirsiniz.
- Nesnelerle çalışma süresi boyunca oturumu açık tutabilirsiniz (Open Session in View).
- Oturum içinde tembel koleksiyonları açıkça başlatabilirsiniz, örneğin
Hibernate.initialize()çağırarak.
Örnek:
Order order = entityManager.find(Order.class, id);
Hibernate.initialize(order.getItems()); // oturum içinde başlatma
entityManager.close();
// Artık güvenle order.getItems() erişilebilir