如何让mybatis需要交易?

时间:2014-10-20 18:22:22

标签: java spring mybatis

在我的项目中,我使用的是Spring和mybatis,mybatis-spring将它们粘在一起。我在服务层周围使用Spring的声明式@Transactional注释,调用mybatis映射器。

我希望在没有活动事务的情况下调用我的mapper方法。相反,他们在无交易的环境中悄悄地运行(否则他们开始新的交易)。

有没有办法禁用此行为并使其更像MANDATORY传播级别?

1 个答案:

答案 0 :(得分:1)

最简单的方法是创建自定义TransactionFactory,它将检查是否存在活动事务,否则抛出异常。

class MandatoryTransactionSpringManagedTransactionFactory extends SpringManagedTransactionFactory {
     public Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit) {
         if (!TransactionSynchronizationManager.isActualTransactionActive()) {
              throw new IllegalTransactionStateException(
                "No existing transaction found during mapper invocation");
         }
         return super.newTransaction(dataSource);

}     }

应该用于配置org.mybatis.spring.SqlSessionFactoryBean