java - 是否可以使用 JpaRepository 在 Spring Data JPA 中使用“TRUNCATE”?还是比标准 deleteAll() 更有效的方法?
问题描述
我目前使用标准的 jparepository 方法 repository.deleteAll() 在添加新信息之前清理我的表。该表由 8300 行组成,每行 5 列。目前将它们全部删除大约需要 80 秒,而使用标准 repository.saveAll(list) 将它们放入需要 1-3 秒。有没有更有效的方法来做到这一点?使用 DELETE FROM 表在 sql 中手动删除数据需要 0.1 秒。使用 MySQL 数据库。从删除的数据日志中放入日志。
解决方案
例如,在您的服务接口中:
public interface MyTableInterface {
//...
void truncateMyTable();
}
在您的服务实现中(使用@Autowired
myTableRepository):
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 层
推荐阅读
- javascript - 打字稿迭代多维json
- c# - 如何在客户发票中使用 Stripe 付款
- yii2 - Yii2中如何避免在不同设备上重复操作导致的脏数据?
- java - 在 Java 中加入字符串列表时出现 OutOfMemoryError
- excel - 查找特定工作表
- wxpython - 在SplitterWindow wxpython中将文本从面板更改为其他面板
- firebase - Firebase 将数字读取为“空”
- sql - SQL Server 中的修剪
- javascript - 我将如何将下降的动画保持在最后一帧?
- java - 为适用于 Android 的 Amazon AWS SES 发送带附件的电子邮件?