当ids为一个元素时正常,多于一个就报错?你这里传来的是?数组?
报错是参数下标越界、
public List<Map> findMapByIds(String hql, Object[] ids) {
List<Map> list =this.getHibernateTemplate().find(hql,ids);
return list.size()>0?list:null;
}
我传的是个数组
@刷子: 那你这里设置的数组和你的sql需要的匹配不上啊
你的"?"代表一个参数,而你的传入是一个Object[]
越界了、
@Beyond-bit: 不清楚,我更新也是这样用?,传的数组,可以批量更新
@刷子: 你把in (?) 换成你 数组的长度 假设数组三个参数 in(?,?,?) 试试
@Beyond-bit: 数组长度不确定的,谢谢你了,已经解决了,用:id
String hql="select new map(id as id, p08002 as p08002) from P08 p where p.id in (:id)";
public List<Map> findMapByIds(final String hql, final Object[] ids) {
//List<Map> list =this.getHibernateTemplate().find(hql,ids);
List<Map> list =this.getHibernateTemplate().execute(new HibernateCallback() {
public List<Map> doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
query.setParameterList("id", ids);
return query.list();
}
});
return list.size()>0?list:null;
}
这样可以
@刷子: 这种也可以,不过刚那种设置没问题,要么就是hql语句写的问题、
@Beyond-bit: 第一个那个执行只有一条记录时没问题,多条时就报那个错了