1

我面临分页问题。我正在使用标准。显示长度为 10。单击分页时,它会显示不同的结果,例如列表为 9 和 8。如何避免这种分页问题。我每次都需要清单 10。如何控制这种不一致。

4

2 回答 2

4

用户setFirstResult()setMaxResults()为此。这是一个简短的代码示例:

EntityManager em = .....
....................
TypedQuery<T> query = em.createQuery(criteria);
query.setFirstResult(pageNumber * pageSize);
query.setMaxResults(pageSize);
于 2013-05-21T14:56:27.803 回答
3

如果您使用的是 firstResult 和 maxResults,那么这意味着结果集可能非常大,并且您希望为每个页面重新执行查询。如果是这种情况,那么数据可能会在查询之间发生变化,从而导致结果不一致。尝试控制这种情况的唯一方法是对某个唯一值或一组值(主键或唯一索引)进行排序,并向条件查询添加一个限制,要求结果的值或值组大于最后一个结果在上一页。即使这样,页面之间的插入、更新和删除仍然会导致结果不一致。

如果结果的最大数量是合理的(比如 500-1000 个结果),那么简单地拉出所有匹配的结果,将它们缓存在内存中,并在 UI 层处理分页以确保一致性可能会更容易。一种常见的策略是将查询限制在某个合理数量的结果(例如 1000),并将 maxResults 设置为加 1(例如 1001)。如果返回的结果数大于您的任意限制(即 1001 次 1000 次),则向用户显示已找到超过 1000 个结果的指示,并且应该使查询更具体(或邀请他们获取下一个 1000 个结果)。

于 2013-05-21T15:01:12.953 回答