gpt4 book ai didi

java - 如何使用jpaRepository的deleteInBatch方法获取已删除行的记录数

转载 作者:行者123 更新时间:2023-11-30 06:45:01 29 4
gpt4 key购买 nike

@Scheduled(cron = "${trackingdetailspurge.cron.expression}")
void oldRecordPurgeDailyCron() {
List<TrackingEvent> listTrackingEvent = trackingEventDao.findByEventDate(450, "AUDIT_EVENT");
logger.info("--Before Tracking_event purge execution | no of records :"+listTrackingEvent.size());
trackingEventDao.deleteInBatch(listTrackingEvent);
logger.info("Tracking event purge completed | no of records :"+listTrackingEvent.size()+" | "+listTrackingEvent.get(0).getId());
List<Tracking> listTracking = trackingDao.findByUpdateDate(450);}
}
<小时/>

这就是我到目前为止正在做的事情。

它给出了 stackoverflow 错误。我正在尝试删除 100 万条记录。

最佳答案

在我看来,如果您尝试删除这么多记录,那么我建议将列表分成偶数组,并迭代删除这些组,每个组都有自己单独的事务。

因此,您可以计算批处理中的最大实体,而不会导致 StackOverflow 并以最快的速度进行处理。此外,您不会阻止其他事务太长时间,这可能是需要考虑的重要一点。

1) 创建一个始终在新的独立事务中运行的服务方法:

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void deleteEventsInBatch(List<TrackingEvent events){
trackingEventDao.deleteInBatch(events);
}

2) 更改您的预定方法以拆分原始列表并循环调用上述服务方法。

现在,您可以保留计数器并在每次成功的服务调用后更新它。如果其中一项失败,则计数器值将保存到目前为止已删除的行。

关于java - 如何使用jpaRepository的deleteInBatch方法获取已删除行的记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43821990/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com