我有一些休眠的争吵。 我的查询,但优化,是非常沉重的。我的一个优化包括限制返回的结果集。 所以使用hibernate我已经使用了方法setMaxResultSet,但我遇到了这篇文章中描述的相同问题:
Hibernate: Pagination with setFirstResult and setMaxResult
(问题是在某些情况下使用setMaxResultSet hibernate包装这样的查询:
select * from (your query) where rownum <= :rownum
)
因此,在这种情况下的解决方案是添加 orderBy ,我有数百万条记录,并且orderBy会终止查询的执行时间。
我已经设法使用 createNativeQuery 克服了这个问题,并传递了我需要的确切查询(类似“my query where rownum <= :rownum" instead of "select * from (your query) where rownum <= :rownum", and goodbye portability
”),但说实话,我不明白为什么Hibernate会像这样行事。
正如之前的帖子所暗示的那样,只要您的查询“不稳定”,hibernate就会解析类似的SQL,因为如果我没有误解,两次执行之间的记录顺序可能不一样,但我不知道该方法如何解决这个稳定性问题。
答案 0 :(得分:0)
我在hibernate中使用相同的分页。下面给出了HQL。它可能对你有用。
(i)最初你应该使用这个查询
List<Object> Entity_Cls_Lst= Objclass.createQuery("from library where book_id>Book_ID order by book_id").list();
(ii)滚动后,您应该获取最后结果数据的Book_ID并传递给条件中的查询。
List<Object> Entity_Cls_Lst= Objclass.createQuery("from library where book_id>Book_ID order by book_id").setMaxResults(MAX_RECORDS).list();