Mybatis sqlsession无法回滚

时间:2016-03-10 02:54:29

标签: java spring oracle11g mybatis spring-mybatis

我使用Springmybatis 3oracle 11g项目中工作。

错误发生时我尝试rollback transactions。但是,回滚似乎不起作用。

源代码如下:

的applicationContext.xml

    <tx:annotation-driven transaction-manager="transactionManager"/>
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

服务

int changeLimitSrcAcc(String src_acctno,String dest_acctno, String amt);

ServiceImpl

    @Override
    public int changeLimitSrcAcc(String src_acctno, String dest_acctno,
            String amt) {
        int result = 0;
        SqlSessionFactory sqlMapper = MyBatisService.getSessionFactory();
        SqlSession sqlSession = sqlMapper.openSession();
        CustomerAccountMapper mapper = sqlSession
                .getMapper(CustomerAccountMapper.class);

        try {
            int result1 = mapper.changeLimitSrcAcc(src_acctno, amt);
            int result2 = mapper.changeLimitDescAcc(dest_acctno, amt);
            if (result1 != 1 || result2 != 1)
                throw new Exception("Error happened");
            else result = 1;
            sqlSession.commit();
        } catch (Exception e) {
            System.out.println(e.getMessage());
            sqlSession.rollback();
        } finally {
            sqlSession.close();
        }
        return result;
    }

我还尝试rollback一个transaction,但它仍然提交。

我在Mybatis主页上看到它说@transaction注释并不需要。我也把annotations放了进去。

任何解决方案?

感谢。

1 个答案:

答案 0 :(得分:0)

您有两种管理交易的方式:

  1. Declarative Transaction Management@Transactional注释)
  2. Programmatic Transaction Management(手动执行提交/回滚)
  3. 你试着两个都做。决定 - 让Spring管理交易 - configure myBatis with Spring config - 更简单的方式或manually create DefaultTransactionDefinition等。