Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用jpaRepository的deleteInBatch方法获取已删除行的记录计数 @Scheduled(cron=“${trackingdetailspurge.cron.expression}”) 作废oldRecordPurgeDailyCron(){ List listTrackingEvent=trackingEventDao.findByEventDate(450,“审计事件”); logger.info(“--Tracking_事件清除执行前|记录数:”+listTrackingEvent.size()); trackingEventDao.deleteInBatch(listTrackingEvent); logger.info(“跟踪事件清除完成|记录数:”+listTrackingEvent.size()+“|”+listTrackingEvent.get(0.getId()); List listTracking=trackingDao.findByUpdateDate(450);} }_Java_Spring_Spring Boot_Spring Data_Spring Data Jpa - Fatal编程技术网

Java 如何使用jpaRepository的deleteInBatch方法获取已删除行的记录计数 @Scheduled(cron=“${trackingdetailspurge.cron.expression}”) 作废oldRecordPurgeDailyCron(){ List listTrackingEvent=trackingEventDao.findByEventDate(450,“审计事件”); logger.info(“--Tracking_事件清除执行前|记录数:”+listTrackingEvent.size()); trackingEventDao.deleteInBatch(listTrackingEvent); logger.info(“跟踪事件清除完成|记录数:”+listTrackingEvent.size()+“|”+listTrackingEvent.get(0.getId()); List listTracking=trackingDao.findByUpdateDate(450);} }

Java 如何使用jpaRepository的deleteInBatch方法获取已删除行的记录计数 @Scheduled(cron=“${trackingdetailspurge.cron.expression}”) 作废oldRecordPurgeDailyCron(){ List listTrackingEvent=trackingEventDao.findByEventDate(450,“审计事件”); logger.info(“--Tracking_事件清除执行前|记录数:”+listTrackingEvent.size()); trackingEventDao.deleteInBatch(listTrackingEvent); logger.info(“跟踪事件清除完成|记录数:”+listTrackingEvent.size()+“|”+listTrackingEvent.get(0.getId()); List listTracking=trackingDao.findByUpdateDate(450);} },java,spring,spring-boot,spring-data,spring-data-jpa,Java,Spring,Spring Boot,Spring Data,Spring Data Jpa,这就是我目前正在做的 这是一个错误。我正试图删除的记录有100万条 在我看来,如果您试图删除这么多记录,那么我建议将列表分成偶数个组,并以迭代方式删除这些组,每个组在各自的单独事务中 由于这一点,您可以计算批处理中的最大实体数,而不会导致堆栈溢出,并且处理速度最快。此外,你不会阻止太久的其他事务,这可能是一个重要的考虑因素。 1)创建一个始终在新的独立事务中运行的服务方法: @Scheduled(cron = "${trackingdetailspurge.cron.expression}")

这就是我目前正在做的


这是一个错误。我正试图删除的记录有100万条

在我看来,如果您试图删除这么多记录,那么我建议将列表分成偶数个组,并以迭代方式删除这些组,每个组在各自的单独事务中

由于这一点,您可以计算批处理中的最大实体数,而不会导致堆栈溢出,并且处理速度最快。此外,你不会阻止太久的其他事务,这可能是一个重要的考虑因素。 1)创建一个始终在新的独立事务中运行的服务方法:

@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);}
}
@Transactional(传播=传播。需要\u NEW)

public void deleteEventsInBatch(List除非要删除的记录在删除之前需要进行详细检查,否则不必在内存中提取记录以删除它们并查找已删除记录的数量。以下操作应起作用:

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void deleteEventsInBatch(List<TrackingEvent events){
    trackingEventDao.deleteInBatch(events);
}
interface TrackingEventRepository扩展了crudepository{
@修改
@查询(“从TrackingEvent e中删除,其中e.date=?1”)
@交易的
int deleteByEventDate(int-date);
}

上述存储库方法可以作为
trackingEventRepository.deleteByEventDate(450)调用
,并将直接从数据库中删除所需的记录,而不将其加载到内存中。该方法的返回值将指示受查询影响的记录数,在这种情况下,将是已删除记录数


Github上提供了A来演示这一点。

好的,很多。我也想问一下如何在这一点上获得删除的记录数。我包括了如何做到这一点的想法,alsoit正在为大约2000条记录工作而不拆分。但是对于更多的记录,它会给出“套接字关闭”异常。拆分是唯一的方法吗?我有b的方法我甚至亲自处理这样的批次。可能还有其他一些方法,但这是我带到谈判桌上的想法。无论是否使用,都由你决定。
interface TrackingEventRepository extends CrudRepository<TrackingEvent, Long> {
  @Modifying
  @Query("delete from TrackingEvent e where e.date = ?1")
  @Transactional
  int deleteByEventDate(int date);
}