我目前正在使用标准的jparepository方法repository.deleteAll()在添加新信息之前清理我的表。该表由8300行组成,每行5列。目前,将它们全部删除大约需要80秒,而使用标准的repository.saveAll(列表)则需要1-3秒。有没有更有效的方法来做到这一点?在sql中使用DELETE FROM table手动删除数据需要0,1秒。使用MySQL数据库。log from putting in data log from deletion.
发布于 2018-10-25 20:42:55
例如,在您的服务接口中:
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/存储库层上
发布于 2018-10-25 20:34:25
deleteAll正在获取所有实体,然后逐个删除:
// Code from SimpleJpaRepository
@Transactional
public void deleteAll() {
for (T element : findAll()) {
delete(element);
}
}我建议您在repo中创建自己的delete方法,如下所示:
@Modifying
@Transactional
@Query("delete from MyEntity m")
void deleteAllWithQuery();这将只创建一条SQL DELETE语句。
https://stackoverflow.com/questions/52989131
复制相似问题