gpt4 book ai didi

java - hibernate hql 和 setMaxResults

转载 作者:太空宇宙 更新时间:2023-11-04 13:11:44 24 4
gpt4 key购买 nike

我与 hibernate 有一些争执。我的查询虽然经过优化,但相当繁重。我的优化之一在于限制返回的结果集。因此,在 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,因为如果我没有误解的话,两次执行之间的记录顺序可能不相同,但我不明白该方法如何解决这个稳定性问题。

最佳答案

我在 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 并传递到 where 条件中的查询。

  List<Object> Entity_Cls_Lst= Objclass.createQuery("from library where book_id>Book_ID order by book_id").setMaxResults(MAX_RECORDS).list();

关于java - hibernate hql 和 setMaxResults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33889474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com