日期:2014-05-19  浏览次数:20722 次

HibernateTemplate这个问题简单吗?
在使用HibernateTemplate使用翻页功能遇到一个问题,小弟不才百思不得其解,未能彻底了解HibernateTemplate故向大侠们求解,望不吝赐教

代码如下:
DetachedCriteria d= DetachedCriteria.forClass( Test.class);
d.addOrder(Order.desc("time"));
getHibernateTemplate().findByCriteria(filter, pageNumber * pageSize, pageSize);

执行第一页生成对应的SQL如下:
  select * from ( select this_.STCD as STCD1_0_, this_.TM as TM1_0_, this_.Z as Z1_0_, this_.Q as Q1_0_ from ST_R this_ order by this_.TM desc ) where rownum <= ?
执行第二页和之后页数都会对应的SQL如下:
select * from ( select row_.*, rownum rownum_ from ( select this_.STCD as STCD1_0_, this_.TM as TM1_0_, this_.Z as Z1_0_, this_.Q as Q1_0_ from ST_R this_ order by this_.TM desc ) row_ ) where rownum_ <= ? and rownum_ > ?
使用的是oracle数据库。
第一句SQL和第二句SQL的ROWNUM,由于取的方式不一样可能会造成同一条数据在第一页和第二页中出现而有的数据则不会取出来。。

------解决方案--------------------
不知道楼主为什么,第一页,和第二页会用两个不同的sql呢?

看一下简单点的例子吧。

http://www.beansoft.biz/?p=1804
------解决方案--------------------
探讨
您说的对,rownum的取值是取出数据是生成的,这个没有什么问题,有个问题请教一下
rownum <= 10 和 rownum>0 and rownum <= 10 ,在没做排序的情况下取值是相等的,做时间排序之后两个取值发生了变化,有什么情况会造成这样?忘赐教,谢谢