2012-05-28 88 views
0

我正在使用休眠,並試圖做一些特定的領域。休眠多個參數setString生成Java

我拆分字符串,然後生成HQL,與

table.entry LIKE :argsearch_0 OR table.entry LIKE :argsearch_0 OR 
table.entry LIKE :argsearch_1 OR table.entry LIKE :argsearch_1 

(0和1是在實際上與計數器遞增)。

,但我得到:

Not all named parameters have been set: [argsearch_0] 

第一個問題:

  • 我可以用2名爲參數,只做1周的setParameter(或了setString):

    String nameParam = "argsearch_"+i; 
    q.setParameter(nameParam, "%"+args[i]+"%"); 
    

第二個問題:

  • 爲什麼我的參數不起作用?
+0

也許是因爲你的'i'在開始時是1? – nullpotent

+1

第一個問題:是的第二個問題:因爲你有一個bug –

+0

我檢查了調試,一切看起來都很好,setString在使用查詢引用的外部函數中完成,這可能是一個問題嗎? –

回答

1

取決於您詢問「我可以使用2個命名參數並僅執行1個setParameter」時的含義。

在您的原始查詢中,您有兩個命名參數('argsearch_0'和'argsearch_1'),並且每個查詢都有2個用法。所以你必須爲'argsearch_0'和'argsearch_1'調用set。但是你只需要爲每個設置一次設置(實際上,如果你真的想要的話,你可以爲每個參數多次調用設置,但只有最後一次被使用)。

至於你的第二個問題,正如有人已經指出的那樣,你的代碼中有一個bug,你沒有設置'argsearch_0'參數的值

+0

當我做「String nameParam =」argsearch _「+ i; q。 setParameter(nameParam,「%」+ args [i] +「%」 );「它應該設置參數? –

+0

當我在同一個查詢中表示2個參數時,它會是這樣的:q = s.createQuery(「select .... where ...:argsearch_0 LIKE ... OR:argsearch_0」),然後只有一個q.setParameter (「argsearch_0」,..)? –

+0

正確。這實際上只是一個命名參數。它恰好在查詢中有多次出現。一次調用set來設置它的所有事件 –