2013-04-27 46 views
14

假設我有以下HQL使用Hibernate兩次

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

似乎不起作用。有沒有人有一個想法如何解決這個問題仍然只使用一個參數?

+0

你會得到什麼錯誤? – 2013-04-27 11:20:47

+0

沒有錯誤。 Resultlist只是空的。 – DmiN 2013-04-27 11:21:38

+0

你有有效的數據嗎?嘗試在persistence.xml中啓用 - showsql = true並獲取原始sql – Sanath 2013-04-27 11:25:43

回答

20
setParameter(String name,Object val) 

這用於將值綁定到指定參數。但是名稱可以在無關緊要的查詢中多次出現。因此,請檢查一次您是否有真正的查詢數據。

查看文檔here

從文檔

命名查詢參數的格式的標記部分正文:在查詢字符串名稱。通過調用 setParameter(「foo」,foo,Hibernate.INTEGER)將值綁定到整型參數:foo;例如, 。名稱可能會在查詢字符串中出現多次。

如果仍然ü沒有得到結果,那麼只用兩個人的名字嘗試,並設置

EntityManager.createQuery(「選擇從其中Ab =:PAR1或AC =:PAR2」 ).setParameter(「par1」,obj).setParameter(「par2」,obj);

+0

這是完全正確的。看起來這個查詢是有點破的。 DBMS通過本地sql也有一個空的結果列表。 +1爲了這個好的描述 – DmiN 2013-04-29 09:55:16