Sobes.tech
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