0

我正在使用休眠,并尝试在某些字段上进行 LIKE。

我正在拆分一个字符串,然后生成 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]+"%");
    

第二个问题:

  • 为什么我的参数不起作用?
4

2 回答 2

1

当您问“我可以使用 2 个命名参数并且只执行 1 个 setParameter”时,这取决于您的意思。

在您的原始查询中,您有 2 个命名参数(“argsearch_0”和“argsearch_1”),每个参数在查询中有 2 个用法。所以你必须为'argsearch_0'和'argsearch_1'调用set。但是您只为每个参数调用一次(实际上,如果您真的需要,您可以为每个参数多次调用 set,但只使用最后一次。

至于您的第二个问题,正如有人已经指出的那样,这是因为您的代码中有错误。您没有设置“argsearch_0”参数的值。

于 2012-05-28T21:15:16.117 回答
0
  You can Try this  



    **Step 1--:** Add How many parameter you need just add in hashmap
   -------------------------------------------------------------------
    
    HashMap param_List=new HashMap();
    param_List.put("contactNo",22);

    
    **Step 2--:** Just You pass your Query
   -------------------------------------------------------------------
    
    Query query1 = session.createQuery("select * from emailTemplate  where c.contactNo =:contactNo");


  **Step 3--:** What ever Data type is no matters but get an output.
  -------------------------------------------------------------------

    for(Object paramKey : param_List.keySet())
    {
    query1.setParameter(paramkey.toString(), param_List.get(paramKey);
    }


 **Step 4--:**
-------------------------------------------------------------------
    String finalResult=query1.getSingleResult().toString();
于 2021-03-08T13:46:46.927 回答