当用户操作可以删除两者之间的行时,如何处理数据库分页?
我陷入了困境。我希望我在这里得到一个解决方案。我正在使用分页在用户配置文件页面上显示一些数据。
使用基本分页执行此操作:
public Page list(Query query, int pageNo, int perPage) {
int totalResults = query.list().size();
int firstResult = (pageNo - 1) * perPage;
query.setFirstResult(firstResult);
query.setMaxResults(perPage);
List resultList = query.list();
return new Page(resultList, perPage, pageNo, totalResults);
}
页面类构造函数:
public Page(List resultList, int pageSize, int page, int totalResults) {
this.resultList = resultList;
this.pageSize = pageSize;
this.page = page;
this.totalResults = totalResults;
this.totalPages = (totalResults - 1) / pageSize + 1;
}
现在,如果结果正常显示而不在两者之间进行任何删除,则可以正常工作。但用户可以从其操作列表中删除项目。
让我们来看看情况。假设有 - 17,- 6和 - 3。totalResults
perPage
totalPages
现在在第一页中,他删除了2个项目,总共留下了15个结果,并且第2页的行ID已经转移到9而不是7(因为没有两个项目,总结果现在是15)。
我希望情况是清楚的。现在不需要这种中间移位。
我正在考虑实现它,但我再次对此感到困惑。剩余项目将始终依赖于 和 和 独立于 (因为总结果在两者之间会减少)。我不能在这里使用最后n行,因为行计数将再次减少,改变我想要的结果。remainingItems
pageNo
perPage
totalResult
我也不想在方法中保留太多参数。例如 - 假设我在参数中传递id并从那里获取行数,我可能会得到想要的东西。但我想要一个更优雅的解决方案。toSatrtWith
perPage