String hql = "from PrFmCommon p where p.parentId=?"Query query = this.getSession().createQuery("select count(*) " + hql);
query.setLong(0, (Long)parameter.get("parentId"));
int totalRecord = ((Long) query.uniqueResult()).intValue();Query query = session.createQuery(hql);                
query.setLong(0, (Long)parameter.get("parentId"));                
query.setFirstResult(0);
query.setMaxResults(50);                
List list = query.list();一个简单的分页功能,
第一段是查询总记录数,返回结果正确
第二段是分页查询,setMaxResults(50)只要大于10,结果总是只返回10条,数据库中符合条件的记录数有200多条经过多次测试,发现把参数设置query.setLong()去掉,直接将值拼到sql中,就不存在这个问题,换过其他几种设置参数的方式setParameter,setProperties,setEntity,均是同样现象,搞的头大了,help啊是我设置分页的方式不对吗?

解决方案 »

  1.   

    .uniqueResult()只确定结果只有一个才使用,都在会出现意外结果。
      

  2.   

    我觉得你设置挺对的。把sql打出来看看
      

  3.   


    select
        count(*) as col_0_0_ 
    from
        Pr_fm_Common prfmcommon0_ 
    where
        prfmcommon0_.parent_Id=?
        
    ------------------------------------------------------------------------select
        * 
    from
        ( select
            prfmcommon0_.id as id22_,
            prfmcommon0_.close_time as close2_22_,
            prfmcommon0_.is_Import as is3_22_,
            prfmcommon0_.is_Move as is4_22_,
            prfmcommon0_.open_time as open5_22_,
            prfmcommon0_.parent_Id as parent6_22_,
            prfmcommon0_.source as source22_,
            prfmcommon0_.title as title22_,
            prfmcommon0_.update_Date as update9_22_,
            prfmcommon0_.version as version22_ 
        from
            Pr_fm_Common prfmcommon0_ 
        where
            prfmcommon0_.parent_Id=? ) 
    where
        rownum <= ?以上是2段sql,目测是没问题的啊
      

  4.   

    不如你把你的sql语句放到 plsql中试试(估计你的表名或字段名需要改下,然后用和之前一样的id值,去试试,看看结果如何)。