Spring Data Jpa deleteAll 大概了解
模块命名就用User吧 使用springboot 2.2.6 + JPA
问题起因
使用springboot开发的模块,部署上去过一段时间都OOM;翻了几遍同事写的代码感觉没啥问题,就是一个定时器1小时
清空一次User表,然后重新再去其他地方拉取下一批数据(前提是我知道这批数据量很小);
定时器是后加的,数据库表中已经有100万条数据量啦,结果就是这个deleteAll方法,把数据全读出来,OOM。
使用
终于找到你“findAll()”,人家是先把数据都查出来,然后一个一个删除,WCL!!!;
替代方法
找一个替代方法,直接执行SQL语句的方法“DELETE FROM user”;这里为了还原问题(在一个事务中,先删除在添加),一个语句执行删除sql,一个用add添加数据。
总结: 直接执行delete方法,都需要事务管理,一种是用spring的事务注解,
另一种是创建新的EntityManager手动事务管理;
成长快乐!成长快乐!成长快乐!
版权声明: 本文为 InfoQ 作者【ilovealt】的原创文章。
原文链接:【http://xie.infoq.cn/article/6f59b312e9f5bd7ca8e195832】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论