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 并将其用作下一个查询的起点,但我想知道是否有更好/另一种方式?
这里的问题是 Hibernate 不知道是否还有更多结果,因为限制是在查询中完成的,并且数据库不会告诉您查询是否有超出请求限制的更多结果。您可以执行计数查询以获取总计数,但这显然非常昂贵。
一个更好的技巧是将 maxResults 设置为比实际页面大小多 1 的值。因此,例如,如果您显示一个包含 50 个结果的页面,您实际上是在向数据库请求 maxResults = 51。您只将 1-50 条记录返回给您的客户端,但是如果您实际上得到了 51 条记录,您可以在那里告诉他们更多的结果(至少一个,对吧?)。
| 归档时间: |
|
| 查看次数: |
774 次 |
| 最近记录: |