我使用 spring PagingAndSortingRepository 对数据库条目进行分页。 在处理过程中我需要删除一些条目..
当我调用存储库进行删除时,该条目被删除,之后问题出在下一个可分页上。我没有从下一个 Pageable (pageRequest.next();) 中获取元素的大小。
有什么方法可以迭代分页并并行执行增删改查操作。
部分代码
while (!onePage.isEmpty()) {
while (pageIterator.hasNext()) {
Object nextElement = pageIterator.next();
if (!falseCondition) {
log.info("sending message with Id {}", nextElement.getId());
repository.deleteById(nextElement.getId());
} else {
log.info("Lost connection");
return;
}
}
pageRequest = pageRequest.next();
onePage = repository.findAll(pageRequest);
pageIterator = onePage.iterator();
}
非常感谢。
最佳答案
就像@ruba在示例中指出的那样,这不是 hibernate 问题。即使您直接使用 jdbc API,您也必须处理这种情况。我可以向您提出解决方案
- 您可以实现自定义
spring-data-jpa
存储库方法,其中服务传递pageRequest
但您将其转换为offset
和限制
。因此,您无需调用pageRequest.next()
,而是执行以下操作,其中考虑了已删除的项目。
long nextPageNumber = pageRequest.getPageNumber() + 1;
long nextOffset = nextPageNumber * pageRequest.getPageSize()
- itemsDeletedInCurrentPage;
long limit = pageRequest.getPageSize();
List<Item> itemsInNextPage = em.createQuery(query)
.setFirstResult(offset)
.setMaxResults(limit)
.getResultList();
关于java - Spring PagingAndSortingRepository 在处理期间删除条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63053204/