MyBatis / Spring - 交易方法

时间:2014-07-11 06:52:38

标签: java spring mybatis

我的@Transactional方法存在问题。执行此方法后 - 将新记录插入到表中,并且在异常

上不会发生回滚
@RestController
@RequestMapping("/rest")
public class TestController {

    @Autowired
    private TestMapper testMapper;

    @Transactional
    @RequestMapping("/test")
    String test() {
        TestObj obj = new TestObj();
        obj.setName(new Date().toString());
        testMapper.insert(obj);

        int i = 1 / 0; // doing exception

        return obj.toString();
    }
}

我的xml配置:

<tx:annotation-driven transaction-manager="transactionManager"/>

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/test"/>
</bean>

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.test.mapper"/>
</bean>

我错过了什么吗?我只是希望DB在我的方法中发生异常时保持不变

修改 问题是该方法未定义为public

2 个答案:

答案 0 :(得分:0)

抛出新的RuntimeException并将注释更改为@Transactional(rollbackFor=Exception.class)

答案 1 :(得分:0)

我们遇到过这种问题,这里是我们用它可以帮助你的。请注意,我们依赖于ApplicationServer:

<!-- Initialize MyBatis Session Factory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!-- Plug datasource and mapperLocations -->
    <property name="dataSource" ref="dataSource" />
    <property name="transactionFactory">
        <bean
            class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" />
    </property>
</bean>