2014-07-11 65 views
0

我的@Transactional方法有問題。執行此方法後 - 新記錄插入到表並沒有回滾發生在異常MyBatis/Spring - 交易方法

@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

回答

0

就拋出新的RuntimeException,改變你的註釋@Transactional(rollbackFor=Exception.class)

+0

更改我的行,拋出異常爲'if(true){throw new RuntimeException(); }'並添加了'rollbackFor = Exception.class',但是這沒有幫助...仍然插入表 – maksim

+0

thx ...的記錄只是缺少'public' for test()方法 – maksim

0

我們有這樣的問題,這裏是我們使用它的conf可能會幫助你。請注意,我們依靠應用程序服務器:

<!-- 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> 
+0

thx ...只是缺少'public '用於test()方法 – maksim