Merhaba değerli Java dostları,
Bu yazımda aslında çok basit bir hareketle çözülebilen; ama bu çözümün bulunması uzun vakit alabilen bir probleme değinmek istiyorum. Entity tanımları yapılırken bağlı entityler lazy load olarak tanımlanabilir. Bu durumda gerçekten o bağlı nesneler çağrıldığında yüklenir. Çağrılmadığı sürece bir proxy ile işler idare edilir. Fakat session ve transaction yönetimi şeklinize bağlı olarak org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role hatasını alabilirsiniz. Bu hatanın nedeni lazy load yapılırken aktif bir session bilgisinin bulunmaması. Bunu çok basit bir hareketle çözüyoruz. Ben annotation tabanlı gittiğim için java kodu üzerinden örnek vereceğim. Xml tabanlı gidenler için de aslında sadece tanım şekli değişiyor, mantık aynı. EntityManagerFactory sınıfı üzerinden properties veriyoruz.
LocalContainerEntityManagerFactoryBean.setJpaProperties(additionalProperties);
additionalProperties tanımı ise aşağıdaki gibi.
Properties properties = new Properties();
properties.setProperty(“hibernate.enable_lazy_load_no_trans”, “true”);
Böylece lazy load yapılırken tekrar bir session açılmasını sağlıyoruz.
Bol Java’ lı günler dileğiyle… ?
Yazan: Faruk Bozan