我写的一个hibernate查询的问题

专打小盆友 发布于 2011/11/15 22:37
阅读 3K+
收藏 0

我在DAOImpl写了一个这样的方法供service层调用,一直报

nested exception is org.hibernate.QueryParameterException: could not locate named parameter [name]

这个错误,麻烦各位高手指点下子勒

public List<SaUser> search(String username,long from,long to){

  StringBuffer hql=new StringBuffer();
  hql.append("from SaUser u where u.state=0");
  Query query=hibernateTemplate.getSessionFactory().getCurrentSession().createQuery(hql.toString());
  System.out.println(hql.toString());
  if(username!=null && username.trim()!=""){
   hql.append(" and u.username like :name");
   query.setParameter("name",username);
   
  }
  if(from>0){
   hql.append(" and u.registerTime >:from");
   query.setParameter("from",from);
  
  }
  if(to>0){
   hql.append(" and u.registerTime <:to");
   query.setParameter("to",to);
   
  }
  System.out.println(hql.toString());
  return (List<SaUser>)query.list();

}

麻烦哪位高手指点下,哪里写错了

加载中
0
红薯
红薯

逻辑有问题啊,createQuery 后,怎么 hql 还在变啊?

你执行的是 from SaUser u where u.state=0 这个 HQL 语句,没有 name 参数。之后对 hql.append 都已经不起作用了

专打小盆友
专打小盆友
我原来的那个写法是可以的,但是感觉代码有些冗余,所以改成了现在的那个就报那个错了
0
专打小盆友
专打小盆友

引用来自“红薯”的答案

逻辑有问题啊,createQuery 后,怎么 hql 还在变啊?

你执行的是 from SaUser u where u.state=0 这个 HQL 语句,没有 name 参数。之后对 hql.append 都已经不起作用了

哦,我开始这样写的,这样写是可以的,但是我觉得代码有点冗余了,所以改成那样的,怎样改下代码会精简点勒

  StringBuffer hql=new StringBuffer();
  hql.append("from SaUser u where u.state=0");
  
  System.out.println(hql.toString());
  
  if(username!=null && username.trim()!=""){
   hql.append(" and u.username like :name");
  }
  if(from>0){
   hql.append(" and u.registerTime >:from");
  }
  if(to>0){
   hql.append(" and u.registerTime <:to");
  }
  System.out.println(hql.toString());
  Query query=hibernateTemplate.getSessionFactory().getCurrentSession().createQuery(hql);
  if(username!=null && username.trim()!=""){
   query.setParameter("name",username);   
  }
  if(from>0){
   query.setParameter("from",from);
  }
  if(to>0){
   query.setParameter("to",to);
  }
  return (List<SaUser>)query.list();

专打小盆友
专打小盆友
@红薯 : 我看JEECMS的源码写了个finder类,搞定了O(∩_∩)O哈哈~
专打小盆友
专打小盆友
哎,之前那样写我觉得代码冗余,所以就改了,我在写后台,RBAC已经写好了,再添加其它功能,我想把这个写完后发布到网上给学jee的人参考
红薯
红薯
因为逻辑稍微复杂,这样的代码已经算精简了
返回顶部
顶部