30 Haziran 2009

JPA'da Bir Problem mi Var?

Çalıştığım projede EJB 3.0 ve JPA'yı kullanmaktayız. Uygulama sunucusu olarak JBoss 4.2.3 GA kullanıyoruz. Bu sabah bir native query yüzünden 1 saat oyalandım durdum. Query native yazıldı çünkü karmaşık bir query idi. JPA API'sindeki createNativeQuery metodu kullanıldı. Sorun şu: query'de çekilen kolonlara isim vermeyince otomatik olarak kolon ismi atanıyor. Bunu da çekilen alanın ismine göre yapıyor. Örneğin; "... d.id, p.id ..." şeklinde kolonlar varsa sonuç listesinde "ID, ID " şeklinde bir görüntü oluşuyor. Bu durumda da normalde d.id değeri 120, p.id değeri 130 ise ikisi de 120 geliyor. Daha sonra query'i "... d.id AS ID1, p.id AS ID2 ..." şeklinde değiştirince sorun gözükmüyor. JPA kolon isimlerinden dolayı bir karmaşaya düşüyor galiba. Çözüm bulmak sevindirici fakat böyle bir saçmalıktan dolayı 1 saat boşa uğraşmak üzücü...

3 yorum:

Adsız dedi ki...

Farklı sütunlar için aynı adı kullanmak standart SQL'de olmayan bir şey. "AS" ile sütun adı verilmezse çıkacak sonuçlara hazır olmak gerekir.

"MySQL allows duplicate column names. This is an extension to standard SQL."

http://dev.mysql.com/doc/refman/5.0/en/select.html

İsimsiz dedi ki...

Askerden gelmişsin anlaşılan. Hayırlı uğurlu olsun. Gelir gelmez de J... ile cebelleşmeye başlamışsın.
Söz konusu meseleye gelince query'nin sonuçlarını kolon isimlerine göre çektiği için Query sonucunda aynı isimde iki kolon bulunması mümkün değil. İkinci ID kolonuna'a otomatik olarak bir suffix veya prefix koyarak isminin değişmesini sağlıyor. Tabi bu alana ulaşmak için dökümanlara bakıp ismi nasıl değiştirdiğine bakmalısın. Ancak En güzeli ve mantıklı olanı sql 'i senin değiştirdiğin gibi değiştirmek. Saygılar.

Serkan Yıldırım dedi ki...

Merhaba isimsiz, JPA query'de kolon isimlerine suffix veya prefix koysa idi benim tekrar AS ile kolon ismi vermeme gerek kalmazdı. Çünkü farklı kolon ismi verdiğimde sorun düzeldi.