中断正在运行的弹簧mybatis事​​务

时间:2012-07-03 10:42:23

标签: spring transactions interrupt mybatis spring-transactions

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

示例:

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

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

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

但我无法在交易运行时中断交易。

在JDBC中我只会这样做:PreparedStatement.cancel()

我试图在MyBatis中获取此PreparedStatement但我认为不可能。

有没有人能解决这个问题?

1 个答案:

答案 0 :(得分:0)

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

并且根据hibernate doc,它是线程安全的

hibernate session

  

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