有时候你使用return this.getSession().createQuery(queryString).setFirstResult( (pageNo - 1) * pageSize).setMaxResults(pageSize).list(); 方式来取一个list时,,发现怎么传数据的page不同返回的结果有时会相似呢?仔细检查打印sql语句,发现,hibernate重新组合sql语句了,select * from ( select row_.*, rownum rownum_ from ( select ....... order by showOrder) row_ where rownum <= 35) where rownum_ > 30,如果showOrder不是唯一大小的话,就会出现上面的情况,所以,,我们可以使用二个字段为排列,使问题解决。
还有,有时,你写sql语句时要注意,比如一条slq语句中有“table as t1”,那么,其它的表也要用上as,不要写成“select t1 from table as t1 , table t where.......”。因为,不正规的sql语句,会让hibernate报错有点怪异。