批量删除抛出QueryCollectorSignal异常?

时间:2016-06-29 19:48:28

标签: java sql postgresql jooq

当我尝试进行批量删除时,没有任何反应。我进入调试器,看到BatchCRUD :: executeAction调用UpdatableRecord :: delete,然后在调用堆栈中,UpdateatableRecordImpl :: checkIfChanged调用fetchOne(),它抛出一个QueryCollectorSignal。执行的sql在PGAdmin(postgres)中运行正常,所以我想知道这里发生了什么?如何进行正确的批量删除?

1 个答案:

答案 0 :(得分:1)

这是什么时候发生的:

  1. 您已启用executeWithOptimisticLocking设置
  2. 此特定表没有任何时间戳或版本列
  3. 为什么会这样?

    batchStore()batchDelete()和类似的调用对每个store()执行相应的delete()UpdatableRecord等来电,但ExecuteListener中止执行(通过此QueryCollectorSignal异常)并只收集本已执行的SQL查询。然后它会批处理这些SQL查询,而不是单独执行它们。遗憾的是,ExecuteListener也应用于乐观锁定所需的SELECT查询。

    最安全的解决方案可能是在我们提供修复之前关闭乐观锁定。我已为此注册了一个问题: https://github.com/jOOQ/jOOQ/issues/5383