我有一个查询,检索特定查询的所有结果,
public List<MyObjs> getMyObjsForCustomer(final Long customerId) throws IOException {
}
这个工作正常一段时间但现在我需要出于性能原因限制结果集,比如......
query.setMaxResults(1000);
但是,我想要一种明智的方法来查明1000是否有更多的结果可以处理UI分页等,处理下一个呼叫等等。有没有办法找出与我的查询匹配的记录是否多于1000返回的记录?相当于一个
query.hasMore();
例如,。我可以获取最后返回记录的ID,并将其作为下一个查询的起点,但我想知道是否有更好的/另一种方式?
答案 0 :(得分:4)
这里的问题是Hibernate不会知道是否还有更多的结果,因为限制是在查询中完成的,并且数据库不会告诉您查询是否有超出请求限制的更多结果。您可以进行计数查询以获得总计数,但这显然可能非常昂贵。
更好的技巧是将maxResults设置为比实际页面大小多1。因此,例如,如果您显示的页面包含50个结果,您实际上会向数据库询问maxResults = 51.您只需将记录1-50返回给您的客户端,但如果您实际上有51条记录,那么您可以告诉它们是更多的结果(至少一个,对吗?)。