今天做項目時使用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;
}