我这里遇到一个麻烦,使用
Db.use().tx(() -> { //先执行第一个更新语句 Db.update("udpate table set col=值 where id=1"); //然后执行DDL语句 Db.use().update("DROP TABLE IF EXISTS tmp_jehz); //再接着执行insert或则update,第二第三个更新语句 Db.update("udpate table2 ..."); Db.update("insert into table3 ..."); //然后由于遇到错误,错误检测代码省略,直接return false模拟异常回滚 return false; }
以上代码,后面第二第三个更新语句可以回滚,但第一句的update更新就不回滚,直接提交了。
这其实和JFinal无关,我百度了一下,mysql在执行DDL语句的时候,会强制提交DDL之前的所有更新操作。
请问这个问题有好的解决办法没。就是我想要在整个逻辑过程中就算中间执行了DDL语句,如果回滚,也要全部回滚。
当然,我现在能想到的就是把DDL语句全部移动到所有更新操作的最前面。这暂时解决我当下的这一个问题。但我还有其他业务,可能不太好把DDL都写前面,甚至可能没办法把DDL写到最前面。有没有什么办法解决?谢谢了!
项目:JFinal