是否可以中断正在执行的 mybatis 数据库事务?
例:
我有一个应用程序,可以将数千条记录插入oracle SQL数据库。这大约需要 5 分钟。如果用户在插入记录时按下"停止"按钮,我想停止数据库事务并回滚更改。
使用事务管理器完成数据库过程后,我可以回滚事务:
TransactionStatus status = txManager.getTransaction(def);
txManager.rollback(status)
但是我无法在事务运行时中断事务。
在JDBC中,我只会做:PreparedStatement.cancel()
我试图在MyBatis中获取这个准备好的声明,但我认为这是不可能的。
有人有解决这个问题的方法吗?
我认为您可以从会话工厂获取当前会话,然后调用Session.cancelQuery(),我认为这反过来使用数据库调用来取消查询执行。
根据休眠文档,它是线程安全的
休眠会话
取消当前查询的执行。这是唯一的方法 可以从另一个线程安全调用的会话。