【问题标题】:Check if javax.persistence.TypedQuery ResultSet hasMore results检查 javax.persistence.TypedQuery ResultSet 是否有更多结果
【发布时间】:2014-03-01 02:46:26
【问题描述】:

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

public List<MyObjs> getMyObjsForCustomer(final Long customerId) throws IOException {
}

这在一段时间内工作得很好,但现在出于性能原因我需要限制结果集,比如......

query.setMaxResults(1000);

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

query.hasMore();

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

【问题讨论】:

    标签: java sql hibernate jakarta-ee jpa


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-26
      • 2011-02-05
      • 2014-01-18
      • 2017-07-24
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      相关资源
      最近更新 更多