2012-05-28 55 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来设置它的所有事件 –