我使用Spring
和mybatis 3
在oracle 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
放了进去。
任何解决方案?
感谢。
答案 0 :(得分:0)
您有两种管理交易的方式:
Declarative Transaction Management
(@Transactional
注释)Programmatic Transaction Management
(手动执行提交/回滚)你试着两个都做。决定 - 让Spring管理交易 - configure myBatis with Spring config - 更简单的方式或manually create DefaultTransactionDefinition
等。