1.Dao层方法:public List findPageByCriteria(final DetachedCriteria detachedCriteria,final int pageSize, final int startIndex) {
        List result = (List) this.getHibernateTemplate().execute( new HibernateCallback(){
                    public Object doInHibernate(Session session)throws HibernateException, SQLException {
                        // 由分离标准产生可执行的标准
                        Criteria criteria = detachedCriteria
                                .getExecutableCriteria(session);
                        // 获取指定位置的数据
                        List result = criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();                  
                        return result;
                    }
                }, true);
        return result;
    }
这个方法在第一次访问jsp时会用到,在该jsp中按条件查询时也用到。
2.Service层,调用它的代码: List content = this.recordDAO.findPageByCriteria(detachedCriteria, pageSize, (currentPage - 1) * pageSize);
问题:只有四个条件组合时才产生,第一次查询时发查询不到记录,但数据库中的是有的,这时criteria的firstResult为当前页的开始行数(我先显示第8页再查询时,pageSize=10,这时firstResult=70);第二次及以后查询时就查得到记录,这时criteria的firstResult为0。
请问这种查询时又不成功啊?
多谢!

解决方案 »

  1.   

    1 你贴出的这段代码,是比简单的通用的代码,而关键的代码你没有给出2 还有pageSize和currentPage 的计算是否正确,这不是hibernate范畴的错误3 无记录是否有错误信息,是否生成了sql语句,sql语句在数据库里执行是否有错误,请根据这些调试
      

  2.   

    谢谢你给的分析!
    问题解决了
    当进行任何组合方式的条件查询时,只要在action中将currentPage=1就可以了。