首页 > 解决方案 > 是否可以使用 JpaRepository 在 Spring Data JPA 中使用“TRUNCATE”?还是比标准 deleteAll() 更有效的方法?

问题描述

我目前使用标准的 jparepository 方法 repository.deleteAll() 在添加新信息之前清理我的表。该表由 8300 行组成,每行 5 列。目前将它们全部删除大约需要 80 秒,而使用标准 repository.saveAll(list) 将它们放入需要 1-3 秒。有没有更有效的方法来做到这一点?使用 DELETE FROM 表在 sql 中手动删除数据需要 0.1 秒。使用 MySQL 数据库。从删除的数据日志中放入日志。

标签: javamysqlsqlspringspring-data-jpa

解决方案


例如,在您的服务接口中:

public interface MyTableInterface {
    //...

    void truncateMyTable();
}

在您的服务实现中(使用@AutowiredmyTableRepository):

public class MyTableImpl implements MyTableService {

    // other methods, @Autowiring, etc

    @Override
    @Transactional
    public void truncateMyTable() {
        myTableRepository.truncateMyTable();
    }
}

在您的存储库中;

public interface MyTableRepository extends JpaRepository<MyTable, Long> {
    //....

    @Modifying
    @Query(
            value = "truncate table myTable",
            nativeQuery = true
    )
    void truncateMyTable();
}

编辑:还要注意@Transactional服务实现层,而不是将其放在 DAO/Repository 层


推荐阅读