今天做项目时使用in条件过滤时不能查询出数据,后来上网查询后,才明白设置到in 中的数据类型必须是数组格式的。例如 query.setParameterList(string, (Object[])obj);
而且参数方法必须使用setParameterList方法,不能使用query.setParameter的方法。

  我们做的是web-service项目前段传递数组不方便可以用集合传递,再在后台将集合转换为数组。


  使用的时候可以参考一下的两个例子

 一

  1. String hql = "FROM Login login WHERE login.id in(:ids)";  

  2. Map<String,Object> map = new HashMap<String,Object>();  

  3. Integer[] ids = new Integer[]{1,2,3};  

  4. map.put("ids",ids);  

  5. List<Login> lstLogin = (List<Login>)xxxDao.findByHql(hql,map,0,0);


 二

  1. private Query setParameter(Query query, Map<String, Object> map) {  

  2.         if (map != null) {  

  3.             Set<String> keySet = map.keySet();  

  4.             for (String string : keySet) {  

  5.                 Object obj = map.get(string);  

  6.                 //这里考虑传入的参数是什么类型,不同类型使用的方法不同  

  7.                 if(obj instanceof Collection<?>){  

  8.                     query.setParameterList(string, (Collection<?>)obj);  

  9.                 }else if(obj instanceof Object[]){  

  10.                     query.setParameterList(string, (Object[])obj);  

  11.                 }else{  

  12.                     query.setParameter(string, obj);  

  13.                 }  

  14.             }  

  15.         }  

  16.         return query;  

  17.     }