我想在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();

解决方案 »

  1.   

    Query query = session.createQuery(hql);这行代码放到后面,hql都还没拼完就先createQuery了,另外,query.setParameter也要等hql拼好,createQuery之后才能做
      

  2.   

    query.setParameter(i++,value); -->
    query.setParameter(i,value); 
    i++;
      

  3.   


    那我的query初始化应该是什么?
      

  4.   

    说这么明白了,拼装好hql之后再用hql初始化query啊
      

  5.   

    占位符中有几个位置需要被赋值,在session.createQuery方法的时候确定的。
      

  6.   

         query.setParameter(i++,value); 
    修改成:
         query.setParameter(i,value); 
         i++;
      

  7.   


    哦,是初始化query的位置的问题,我之前是,先拼出在hql,在setParameter,顺序折腾半天
      

  8.   


    原来是这样啊我还总纠结于setParameter的位置