hibernate在查询第一页时与查询第二页及之后页时,生成的查询代码都不同,这肯定是hibernate的问题啊,如果在查询第一页时时,也使用: select * from (select row_.*,rownum rownum_ from (myquery) row_) where rownum_<=10 and rownum_>0 是不会有任何问题的,但hibernate偏偏在查询第一页时,使用: select * from (myquery) where rownum<=10 这样会导致查询结果的顺序不一致的啊,这应该是hibernate的BUG吧。
加上 order by 主键
我的代码就是 x.setFirstResult(start); x.setMaxResult(size); list = x.list();问题是hibernate在生成目标查询代码的时候,第一页和非第一页的查询代码是不同的。
你试试看: select * from (select t.* from xxx t order by t.x1 asc) where rownum<=10 与 select * from (select row_.*,row_.rownum rownum_ from (select t.* from xxx t order by t.x1 asc) row_) where rownum_<=10 and rownum_>0这两种结果是不一样的,现在的问题就是我发现Hibernate里,第一页是采用的上者的方式,而非第一页时采用的是下者的方式。
有可能 myquery 部分的排序大面积重复 所以没有一个标识 oracle 每次查询返回的结果顺序不是相同的 order by 支持按多列排序 你可以在最后加上 id 不影响什么
select * from (select rownum ro,t.* from xxx t) where rownum<=10 and ro>5没问题
setFirstResult();
setMaxResult();
配置好数据库方言会自动帮你转换为各数据库的分页语句
hibernate在查询第一页时与查询第二页及之后页时,生成的查询代码都不同,这肯定是hibernate的问题啊,如果在查询第一页时时,也使用:
select * from (select row_.*,rownum rownum_ from (myquery) row_) where rownum_<=10 and rownum_>0
是不会有任何问题的,但hibernate偏偏在查询第一页时,使用:
select * from (myquery) where rownum<=10 这样会导致查询结果的顺序不一致的啊,这应该是hibernate的BUG吧。
x.setFirstResult(start);
x.setMaxResult(size);
list = x.list();问题是hibernate在生成目标查询代码的时候,第一页和非第一页的查询代码是不同的。
1.我的代码中 myquery 部分是包含order by的
2.不一定要按主键排序吧?实际的业务情况,有些是不能按主键排序的。
你试试看:
select * from (select t.* from xxx t order by t.x1 asc) where rownum<=10
与
select * from (select row_.*,row_.rownum rownum_ from (select t.* from xxx t order by t.x1 asc) row_) where rownum_<=10 and rownum_>0这两种结果是不一样的,现在的问题就是我发现Hibernate里,第一页是采用的上者的方式,而非第一页时采用的是下者的方式。
oracle 每次查询返回的结果顺序不是相同的
order by 支持按多列排序 你可以在最后加上 id 不影响什么
帖sql
对头,Oracle的那个有子查询影响速度