从提到的行向前使用hibernate从mysql批量获取行的方法

时间:2014-04-14 06:35:31

标签: spring hibernate jpa

我在服务类中有一个查询   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中不起作用。 感谢

1 个答案:

答案 0 :(得分:0)

我认为您可以继续获取页面1.假设每个批次都在自己的事务中处理,那么当您处理第二批时,第1页应该为您提供接下来的500个未处理的行