1

spring 和 mybatis 是否可以中断正在执行的 mybatis 数据库事务?

例子:

我有一个将数千条记录插入 Oracle SQL 数据库的应用程序。这大约需要 5 分钟。如果用户在插入记录时按下“停止”按钮,我想停止数据库事务并回滚更改。

使用事务管理器完成数据库过程后,我可以回滚事务:

TransactionStatus status = txManager.getTransaction(def);
txManager.rollback(status)

但我无法在事务运行时中断事务。

在 JDBC 中,我会简单地做:PreparedStatement.cancel()

我试图在 MyBatis 中获得这个 PreparedStatement,但我认为这是不可能的。

有没有人可以解决这个问题?

4

1 回答 1

0

我认为您可以从会话工厂获取当前会话,然后调用 Session.cancelQuery() 我认为反过来使用 db 调用来取消查询执行。

根据休眠文档,它是线程安全的

休眠会话

取消当前查询的执行。这是会话上唯一可以从另一个线程安全调用的方法。

于 2012-07-16T07:11:11.263 回答