我在分页时面临问题。我正在使用标准。显示长度为10.点击分页时显示不同的结果,例如列表是9和8。如何避免这种分页问题。我每次都需要清单10。如何控制这种不一致性。
答案 0 :(得分:3)
用户setFirstResult()
和setMaxResults()
。这是一个简短的代码示例:
EntityManager em = .....
....................
TypedQuery<T> query = em.createQuery(criteria);
query.setFirstResult(pageNumber * pageSize);
query.setMaxResults(pageSize);
答案 1 :(得分:3)
如果您正在使用firstResult和maxResults,那么这意味着结果集可能非常大,并且您希望为每个页面重新执行查询。如果是这种情况,那么数据可能会在查询之间发生变化,从而导致结果不一致。尝试控制此操作的唯一方法是对某些唯一值或值组(主键或唯一索引)进行排序,并对条件查询添加限制,该限制要求结果的值或值组大于上一结果在上一页中。即使这样,页面之间的插入,更新和删除仍会导致结果不一致。
如果结果的最大数量是合理的(比如500-1000个结果),则可以更容易地简单地提取所有匹配结果,将它们缓存在内存中,并在UI层中处理分页以确保一致性。常见的策略是将查询限制为一些合理数量的结果(例如1000),并将maxResults设置为加1(例如1001)。如果返回的结果数大于您的任意限制(即1001副1000),则向用户显示超过1000个结果并且查询应更具体(或邀请他们获取接下来的1000个结果)的指示)。