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