java - 如何让mybatis需要事务?

标签 java spring mybatis

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

我希望在没有 Activity 事务的情况下不能调用我的映射器方法。相反,它们静静地在无事务上下文中运行(或者它们正在启动新事务)。

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

最佳答案

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

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

关于java - 如何让mybatis需要事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26472344/

相关文章:

java - 简单的 'Make chocolate'逻辑和解决方案回顾

Java 用鼠标调整形状大小

java - Java 类的单元测试和源代码

java - spring - xsl 转换 dtd 未找到错误

java - 通过 yaml 嵌套配置 - spring boot

java - 关联的 MyBatis 集合只返回一行

java - applicationContext.xml bean 的 swing 编辑器 ui?

java - 加载bean类失败;嵌套异常是 java.io.FileNotFoundException : class path resource cannot be opened because it does not exist

java - 如何在 MyBatis 中使用 UUID 类型处理程序和 @Many 注释?

java - MyBatis 与 MS SQL 未映射到 LocalDateTime