检查 javax.persistence.TypedQuery ResultSet 是否有更多结果

use*_*591 2 java sql hibernate jpa jakarta-ee

我有一个查询,可以检索特定查询的所有结果,

public List<MyObjs> getMyObjsForCustomer(final Long customerId) throws IOException {
}
Run Code Online (Sandbox Code Playgroud)

这在一段时间内运行良好,但现在我需要出于性能原因限制结果集,例如..

query.setMaxResults(1000);
Run Code Online (Sandbox Code Playgroud)

但是,我想要一种智能的方法来找出 1000 是否有更多的结果来处理 UI 分页等,处理下一个呼叫等等。有没有办法找出与我的查询匹配的记录是否比返回的 1000 多?相当于一个

query.hasMore();
Run Code Online (Sandbox Code Playgroud)

例如。我可以获得最后返回的记录的 ID 并将其用作下一个查询的起点,但我想知道是否有更好/另一种方式?

nei*_*ldo 5

这里的问题是 Hibernate 不知道是否还有更多结果,因为限制是在查询中完成的,并且数据库不会告诉您查询是否有超出请求限制的更多结果。您可以执行计数查询以获取总计数,但这显然非常昂贵。

一个更好的技巧是将 maxResults 设置为比实际页面大小多 1 的值。因此,例如,如果您显示一个包含 50 个结果的页面,您实际上是在向数据库请求 maxResults = 51。您只将 1-50 条记录返回给您的客户端,但是如果您实际上得到了 51 条记录,您可以在那里告诉他们更多的结果(至少一个,对吧?)。