首页 > 解决方案 > 如何删除具有特定列号和行号的所有值?

问题描述

这段代码耗时太长:

List<DataLogg> selectedLogger = dataLoggRepository.findByLoggerId(loggerId.getValue());
for(int i = firstIndex-1; i < lastIndex; i++) {
    try {
        DataLogg dataLogg = selectedLogger.get(i);
        if (dataLogg != null) {
            dataLoggRepository.delete(dataLogg);
        }
    } catch(Exception e1) {}
}

有什么办法可以避免这个 for 循环,并且仍然删除firstIndex-1和之间lastIndex具有列值的所有内容loggerId.getValue()

来自以下评论的建议:

List<DataLogg> selectedLogger = dataLoggRepository.findByLoggerId(loggerId.getValue());
List<DataLogg> deleteThese = new ArrayList<DataLogg>();
for(int i = firstIndex-1; i < lastIndex; i++) {
    try {
        DataLogg dataLogg = selectedLogger.get(i);
        deleteThese.add(dataLogg);
    } catch(Exception e1) {}
}
dataLoggRepository.deleteInBatch(deleteThese);

标签: javamysqlsqlspring-bootjpa

解决方案


    @Query(value = "Delete from dataLoggTable where dataLoggTable.id in " +
            "(select id from dataLoggTable offset :firstIndex)", 
            nativeQuery = true)
    @Modifying
    @Transactional
    void delete(int firstIndex);

推荐阅读