我在Spring
项目中工作,使用mybatis 3
and oracle 11g
。
我试图rollback transactions
在错误发生时。但是,回滚似乎不起作用。
源代码如下:
应用程序上下文.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);
服务实现
@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
,什么也没发生。
有什么解决办法吗?
谢谢。