我在服务类中有一个查询 PageRequest page = new PageRequest(pageNo,batchSize,new Sort(new Order(Direction.ASC,“Id”))); Page pPage = this.pRepository.findByStatusAndParentPId(Status.PENDING,-1,page);
其中 batchSize = 500
在存储库中,我们有以下代码:
@Query("select p from Part p where p.succeedOn IS NOT NULL and p.Status=? and p.parentId=?")
Page<Payment> findByStatusAndParentId( String status, Integer parentId, Pageable p);
现在流程是这样的,我想每次获取500行,其状态为待处理,然后我需要处理它并需要将状态更改为成功。所以使用Pageable给我错误的结果是因为,假设它获取状态为挂起的前500行,它处理它并将状态更改为成功,现在它将再次进行sql查询并将从501获取行到1000,但实际上是行1到500也有状态挂起,因为旧的已处理行状态已更改为成功,因此它们不会在sql查询中涵盖。
现在要解决这个问题,我想用最后一次获取的Id的最后一行进行分页,比如说上次从100到600获取,然后我想给601作为参数,并希望从前面获取所有行....希望我能够解释我的答案。查询中的限制在JPA中不起作用。 感谢
答案 0 :(得分:0)
我认为您可以继续获取页面1.假设每个批次都在自己的事务中处理,那么当您处理第二批时,第1页应该为您提供接下来的500个未处理的行