Hibernate标准的分页

时间:2013-05-21 14:47:53

标签: java javascript

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

2 个答案:

答案 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个结果)的指示)。