2013-04-27 16 views
14

i şu HQLkullanma hazırda adlı parametre iki kez

EntityManager.createQuery("SELECT a FROM a WHERE a.b = :par OR a.c = :par").setParameter("par", obj); 

çalışmamasına görünüyor var varsayılmıştır. Herkesin bu problemi nasıl çözeceğine dair bir fikri sadece tek bir parametre kullanarak kalıyor mu?

+0

Hangi hatayı alıyorsunuz? –

+0

Hata yok. Sonuç listesi sadece boş. – DmiN

+0

Geçerli verileriniz var mı? persistence.xml dosyasında showql = true öğesini etkinleştirin ve raw sql değerini alın. – Sanath

cevap

20
setParameter(String name,Object val) 

Bu, adlandırılmış parametreye bir değer bağlamak için kullanılır. Ancak, önemli olmayan bir sorguda bir ad birden çok kez ortaya çıkabilir. Bu sorgu için gerçekten veri olup olmadığını bir kez kontrol edin.

kontrolü dokümanlarını here

Named sorgu parametreleri formun simgeleri olduğunu belgelerinden bazıları ana metin: Sorgu dizesinde isim. Bir değer tamsayı parametresine bağlanır: setParameter ("foo", foo, Hibernate.INTEGER) çağırarak foo; Örneğin, . Bir ad, sorgu dizesinde birden çok kez görünebilir. Hala u sonra sonuç alamazsanız

sadece iki isim kullanarak deneyin ve

EntityManager.createQuery (set "Bir WHERE ab = GELEN bir SEÇ: par1 VEYA ac =: par2") .setParameter ("par1", obj) .setParameter ("par2", obj));

+0

gibi ayarlayabilirsiniz. Peki bu tam olarak doğrudur. Görünüşe göre sorgu kırılmıştı. DBMS, yerel sql üzerinden de boş bir sonuç listesine sahiptir. +1 Bu güzel açıklama için – DmiN