今天做项目时使用in条件过滤时不能查询出数据,后来上网查询后,才明白设置到in 中的数据类型必须是数组格式的。例如 query.setParameterList(string, (Object[])obj);
而且参数方法必须使用setParameterList方法,不能使用query.setParameter的方法。
我们做的是web-service项目前段传递数组不方便可以用集合传递,再在后台将集合转换为数组。
使用的时候可以参考一下的两个例子
一
String hql = "FROM Login login WHERE login.id in(:ids)";
Map<String,Object> map = new HashMap<String,Object>();
Integer[] ids = new Integer[]{1,2,3};
map.put("ids",ids);
List<Login> lstLogin = (List<Login>)xxxDao.findByHql(hql,map,0,0);
二
private Query setParameter(Query query, Map<String, Object> map) {
if (map != null) {
Set<String> keySet = map.keySet();
for (String string : keySet) {
Object obj = map.get(string);
//这里考虑传入的参数是什么类型,不同类型使用的方法不同
if(obj instanceof Collection<?>){
query.setParameterList(string, (Collection<?>)obj);
}else if(obj instanceof Object[]){
query.setParameterList(string, (Object[])obj);
}else{
query.setParameter(string, obj);
}
}
}
return query;
}
原文:http://8931565.blog.51cto.com/8921565/1623484