31 Ocak 2014 Cuma

Hibernate Left Join Referans Problemi

 Hibernate ile ilgili bugün rastladığım bir durumu paylaşmak istiyorum..
Var olan bir tablomdaki iki kolon üzerinden aynı tabloya left join yaptığımda Hibernate bu sonuçları kendi modellerime dönüştürdüğünde gelen verilerde bir sıkıntı olduğunu farkettim.

İkinci left joinimden gelen veri null olarak gelmeliydi.Ancak ilk tablom ile aynı instance id de kayıt geliyordu.


Çalıştırdığım sql bu şekildeydi.


SELECT entry.*,createuser.*, updateuser.* FROM BLOG.ENTRY entry 
LEFT JOIN BLOG.BLOGUSER createuser ON entry.crtuserid=createuser.userid
LEFT JOIN BLOG.BLOGUSER updateuser ON entry.upduserid=updateuser.userid

Bunun için 
Hibernate ile select işlemi için SQLQuery kullanmıştım.Öncelikle kullandığınız tablolara alias vermeli ve sqlquery nesnenize eklemelisiniz.

SQLQuery query= em.createSqlQuery(hql);
query.addEntity("entry", Entry.class);
query.addEntity("createuser", Bloguser.class);
query.addEntity("updateuser", Bloguser.class);

Ancak bu değişikliklerde gelen verinin düzenlenmesine yetmedi.
Araştırmalarımda aynı tablo üzerine yapan left joinlerde select edilen veriler için  braces yani süslü parantez kullanılması öneriliyordu.
 
Sqlimin select kolonlarını braces ile sarmaladıktan sonra istediğim sonucu elde edebildim.
 

SELECT {entry.*},{createuser.*},{ updateuser.*} FROM BLOG.ENTRY entry 
LEFT JOIN BLOG.BLOGUSER createuser ON entry.crtuserid=createuser.userid
LEFT JOIN BLOG.BLOGUSER updateuser ON entry.upduserid=updateuser.userid