15 Mayıs 2016 Pazar

java.lang.IllegalArgumentException: Removing a detached instance

JPA ile remove işlemi denediğinizde title da geçen java.lang.IllegalArgumentException: Removing a detached instance hatasını aldığınızda temel olarak sorunun kullandığınız sessiona ait olmayan bir entity i silmeye çalışmanız olduğunu düşünebilirsiniz.

Sorunun tespiti için kullandığınız transaction-type önemlidir JTA kullanmıyor transaction ı siz yönetiyor iseniz bu soruna bulaşmayı siz seçmişsiniz demektir.Kullandığınız teknoloji sebepli Resource-Local ile çalışıyorsanız entitymanager ı ne zaman kapattığınız önemlidir.

Genelde hata sayfaya gelen listedeki bir elemanın silinme isteği sebebi ile alınır.Datayı sayfaya getirdikten sonra entitymanager ı kapatmış iseniz silme işleminde yeni bir entitymanager oluşturmanız gerekecek bu entitymanager ile EntityManager#remove() denediğinizde hata alacaksınız

Hata mesajında belirtildiği üzere bu entitymanager  yeni oluşturuldu ve içinde attach edilmiş sizin belirttiğiniz gibi bir entity bulunmuyor 

Yapılması gereken EntityManager#contains()  metodu ile entitymanager için bu entity nin varlığının teyidi mevcut ise  EntityManager#remove() aksi durumda
 EntityManager#merge(). denenmesidir Aşağıda kodun shorten hali bulunmaktadır.

em.remove(em.contains(entity) ? entity : em.merge(entity));



Hiç yorum yok:

Yorum Gönder