针对mysql数据库执行批量更新操作(PreparedStatement.executeBatch()方法),在满足mysql的批量更新操作条件(mysql配置rewriteBatchedStatements=true且批量更新记录数值>3)时,无法创建undolog,
Ⅱ. 描述发生的事情经调试发现问题出在AbstractDMLBaseExecutor类中的以下方法中: protected T executeAutoCommitFalse(Object[] args) throws Exception { if (!JdbcConstants.MYSQL.equalsIgnoreCase(getDbType()) && isMultiPk()) { throw new NotSupportYetException("多pk仅支持mysql!“); } TableRecords 之前图像 = 之前图像(); T 结果 = statementCallback.execute(statementProxy.getTargetStatement(),args); int 更新计数 = statementProxy.getUpdateCount();如果 (updateCount > 0) { TableRecords afterImage = afterImage(beforeImage);准备UndoLog(图像前,图像后); } 返回结果; }
int 更新计数 = statementProxy.getUpdateCount();该行代码在mysql开启批量处理时始终返回-1(批量处理时没有对结果进行赋值),因此无法创建undolog 在关闭批量处理(rewriteBatchedStatements=false)或者批量处理数目<=3时正常
Ⅲ. 描述你期望发生的事情 Ⅳ. 如何重现它(尽可能简洁和精确)1.mysql配置rewriteBatchedStatements=true 2.执行jdbcTemplate.batchUpdate.batchUpdate("update XXX set field=? where id=?”,args) 其中确保args的数量>3
Ⅵ. 环境:- JDK版本:1.8
- Seata 版本:1.5.2
- 操作系統:
- 其他的: