Varım o halde yazıyorum…

Object references an unsaved transient instance

Mayıs 7th 2010 Hibernate

Hibernate API ‘yi kullananlar TransientObjectException:Object references an unsaved transient instance – save the transient instance before flushing hatası işle karşılaşmışlardır mutlaka. Şöyle bir örnek üzerinden açıklayacak olursak; Araba ve Kullanici adli iki modelimiz olduğunu ve Araba modelinde

@ManyToOne()
@JoinColumn(name = “KULLANICI_ID”)
private Kullanici kullanici;

şeklinde bir Kullanici alanımız olduğunu varsayalım. Aksiyon sınıfında;


araba.setKullanici(kullanici);
entityManager.persist(araba);
entityManager.flush();

şeklinde bir kod bloğu yukarıdaki hatayı almamıza sebep olacaktır. Kullanici nesnesi sessionda varolmasına rağmen henüz veritabaninda mevcut değildir, yani “transient object” tanımına girmektedir. Araba tablosunda “foreign key” olarak bulunan KULLANICI_ID alanına yerleştirilecek bir ID yoktur ortalıklarda. Dolayısıyla ilişki kurulamaz. Hatayı iki şekilde gidermek mümkün. Birincisi kod bloğunu;


araba.setKullanici(kullanici);
entityManager.persist(araba.getKullanici());
entityManager.flush();

entityManager.persist(araba);
entityManager.flush();

şeklinde düzenleyip önce Kullanici nesnesini veritabanına yazmak, ikincisi de ilişkiyi

@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = “KULLANICI_ID”)
private Kullanici kullanici;

şeklinde tanımlayarak bu Araba veritabanına kaydedilirken ve güncellenirken Kullanici nesnesinin de veritabanina yazilmasini sağlamak. Elbette ki sağlıklı olan annotation da ilişkinin özelliğini bildirerek bu gibi kontrolleri ve performansı API nin kendisine bırakmak.

Benzer bir durum OneToMany() ilişkilerde de sözkonusu. Çözüm yine benzer şekilde.

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail



gerekli



gerekli - yayımlanmayacak


Yorum Yap & Fikrini Paylaş

Sadece Eclipse değil aynı zamanda diğer bir çok IDE’ye de (JDeveloper, JBuilder, IntelliJ IDEA vs.) eklenebilen gayet faydalı bir eklentiden söz etmek istedim; PMD. Şurada da bahsedildiği üzere PMD neyin kısaltması ola ki sorusunun bir sürü cevabı var, veya aslında yok. (Pretty Much Done, Project Mess Detector, Project Monitoring Directives vs.) Yaptığı iş Java kodunu […]

Önceki Yazılar

Şaka gibiydi. Amerikan polisiye-gerilim filmlerinden etkilenirsin eyvallah, olur hani. Hakim film kültürüdür Hollywood. Huyundan kapmasan suyundan kaparsın. Da hani hiç mi kendinden birşey katmaz insan sinemaya. İstanbul’un artık klişe haline getirilip tadı tuzu kaçırılan mekanlarını kendine fon yapan, her bir diyaloğu tatsız, tuzsuz ve dayandığı senaryosu temcit pilavı misalinden öteye geçemeyen yakışıksız bir film. […]

Sonraki Yazılar

Sharing
Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail