query.setParameter总是提示越界异常

zhouyouok 2011-12-30 10:13:19
我想在Dao里实现查询,用Map<String,Object>封装查询条件,在Dao里查询时候老是出错,求帮助

List<T> list = null;
String hql = "from "+entity.getSimpleName()+" o where 1=1";
Session session = this.getSession();
Query query = session.createQuery(hql);
int i = 0;
if(maps!=null && maps.size()>0){
for(String propertyName:maps.keySet()){
hql+=" and o."+propertyName+"=?";
Object value = maps.get(propertyName);
query.setParameter(i++,value);
}
}
query.setFirstResult((nowPage-1)*pageSize);
query.setMaxResults(pageSize);
list = query.list();
session.close();
...全文
223 点赞 收藏 11
写回复
11 条回复
q394656693 2013年03月06日
解决了吗?我也遇到的同样的问题
回复 点赞
zhouyouok 2011年12月30日
[Quote=引用 7 楼 licip 的回复:]
占位符中有几个位置需要被赋值,在session.createQuery方法的时候确定的。
[/Quote]

原来是这样啊

我还总纠结于setParameter的位置
回复 点赞
zhouyouok 2011年12月30日
[Quote=引用 6 楼 panhaichun 的回复:]
说这么明白了,拼装好hql之后再用hql初始化query啊
[/Quote]

哦,是初始化query的位置的问题,我之前是,先拼出在hql,在setParameter,顺序折腾半天
回复 点赞
YeHuai1991 2011年12月30日
query.setParameter(i++,value);
修改成:
query.setParameter(i,value);
i++;
回复 点赞
licip 2011年12月30日
占位符中有几个位置需要被赋值,在session.createQuery方法的时候确定的。
回复 点赞
panhaichun 2011年12月30日
说这么明白了,拼装好hql之后再用hql初始化query啊
回复 点赞
zhouyouok 2011年12月30日
[Quote=引用 2 楼 panhaichun 的回复:]
Query query = session.createQuery(hql);

这行代码放到后面,hql都还没拼完就先createQuery了,

另外,query.setParameter也要等hql拼好,createQuery之后才能做
[/Quote]

那我的query初始化应该是什么?
回复 点赞
icare 2011年12月30日
query.setParameter(i++,value);

-->
query.setParameter(i,value);
i++;
回复 点赞
panhaichun 2011年12月30日
Query query = session.createQuery(hql);

这行代码放到后面,hql都还没拼完就先createQuery了,

另外,query.setParameter也要等hql拼好,createQuery之后才能做
回复 点赞
金先生1 2011年12月30日
在代码里打个断点调试一下,这样在哪出错不就清楚了么。
回复 点赞
发动态
发帖子
Web 开发
创建于2007-09-28

5.2w+

社区成员

34.1w+

社区内容

Java Web 开发
社区公告
暂无公告