spring data jpa deleteInBatch 导致异常 java.lang.StackOverflowError
- 异常现象:使用deleteInBatch删除实体list如果元素数量过多会抛出异常如下:
- 原因分析:deleteInBatch实际转换为如下的sql
delete from [table_name] where [criteria] = id or [criteria] = id (and so on...)
HqlSqlBaseWalker需要搜索遍历所有的where条件语句,如图报错中执行了1020次导致溢出错误。
- 解决方案:将集合划分为多个小的集合分次调用deleteInBatch