根据页面的输入条件自己动态拼写hql。

解决方案 »

  1.   

    除了拼写HQL就没别的办法了吗?如果选项特别多的话不把人累死了。有没有类似ibatis配置?
      

  2.   

    对于单表,正规的查询可以用Criteria,比较简单
    当Criteria不能满足你的要求的时候,还是要用hql
      

  3.   

    hibernate利用Criteria可实现动态查询,举个例子
                 Criteria criteria = session.createCriteria(Person.class).setFirstResult(from).setMaxResults(number);
                 if(null !=condition){
                 if(condition.getPersonCodeQuery() !=null &&!condition.getPersonCodeQuery().trim().equals("")){
                 criteria.add(Restrictions.like("personCode", condition.getPersonCodeQuery()+"%"));
                 }if(condition.getPersonIdBeginQuery() !=null &&!condition.getPersonIdBeginQuery().trim().equals("")){
                 criteria.add(Restrictions.ge("personID", new Integer(condition.getPersonIdBeginQuery())));
                 }if(condition.getPersonIdEndQuery() !=null &&!condition.getPersonIdEndQuery().trim().equals("")){
                 criteria.add(Restrictions.le("personID", new Integer(condition.getPersonIdEndQuery())));
                 }if(condition.getPersonSexQuery() != null &&!condition.getPersonSexQuery().trim().equals("")){
                 criteria.add(Restrictions.eq("personSex", condition.getPersonSexQuery()));
                 }
                 }
                 criteria1.list();
      

  4.   

    我知道楼上的写法,但是在选项比较多的情况的下显得代码量非常的多,看着就恶心
    hibernate中有没有很简单的实现方法?
      

  5.   

    只有两种方法
    1 hql拼接字符串
    2 Criteria(写一大堆判断,确实有些恶心,呵呵)那就只能用第一种方法,如果你用到了spring的话,可以用HibernateTemplate里的find方法,如果没用spring,那么可以这么用hql,其实就是把spring的部分代码拿出来了...一系列的if判断,拼接字符串
    Query queryObject = session.createQuery(queryString);
    if (values != null) {
    for (int i = 0; i < values.length; i++) {
    queryObject.setParameter(i, values[i]);
    }
    }
    List list = queryObject.list();
    其中queryString是动态拼接的hql语句,比如from Xxx x where x.id=? and x.name like ?
    values是查询条件组成的数组