首页 新闻 赞助 找找看

HQL 查询时参数报错

0
悬赏园豆:20 [已关闭问题] 关闭于 2014-01-13 14:07
 String hql="select new map(id as id, p08002 as p08002) from P08 p where p.id in (?)";

List<Map> list =this.getHibernateTemplate().find(hql,ids);

报错java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!

当ids为一个元素时正常,多于一个就报错,请各位指点下啊 
刷子的主页 刷子 | 初学一级 | 园豆:183
提问于:2013-08-30 14:42
< >
分享
所有回答(1)
0

当ids为一个元素时正常,多于一个就报错?你这里传来的是?数组?

报错是参数下标越界、

Beyond-bit | 园豆:2885 (老鸟四级) | 2013-08-30 14:55

public List<Map> findMapByIds(String hql, Object[] ids) {
List<Map> list =this.getHibernateTemplate().find(hql,ids);
return list.size()>0?list:null;
}

我传的是个数组

支持(0) 反对(0) 刷子 | 园豆:183 (初学一级) | 2013-08-30 15:00

@刷子: 那你这里设置的数组和你的sql需要的匹配不上啊

你的"?"代表一个参数,而你的传入是一个Object[] 

 

越界了、

支持(0) 反对(0) Beyond-bit | 园豆:2885 (老鸟四级) | 2013-08-30 15:03

@Beyond-bit: 不清楚,我更新也是这样用?,传的数组,可以批量更新

支持(0) 反对(0) 刷子 | 园豆:183 (初学一级) | 2013-08-30 15:04

@刷子: 你把in (?)    换成你 数组的长度      假设数组三个参数    in(?,?,?)      试试

支持(0) 反对(0) Beyond-bit | 园豆:2885 (老鸟四级) | 2013-08-30 15:15

@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;
}

这样可以

支持(0) 反对(0) 刷子 | 园豆:183 (初学一级) | 2013-08-30 15:21

@刷子: 这种也可以,不过刚那种设置没问题,要么就是hql语句写的问题、

支持(0) 反对(0) Beyond-bit | 园豆:2885 (老鸟四级) | 2013-08-30 15:27

@Beyond-bit: 第一个那个执行只有一条记录时没问题,多条时就报那个错了

支持(0) 反对(0) 刷子 | 园豆:183 (初学一级) | 2013-08-30 17:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册