transaction begin,commit, rollback的有关问题
transaction begin,commit, rollback的问题有两个类A和B,B是已经实现好的,现在的逻辑是这样的Java codeA.m
transaction begin,commit, rollback的问题
有两个类A和B,B是已经实现好的,现在的逻辑是这样的
Java codeA.method1(){ beginTransaction(); try{ //business B.business(); commitTransaction(); }catch(Exception e){ rollback(); }}
结果发现B.business()里面也有类似的逻辑(beginTransaction,commitTransaction)
这样上面的代码就有错误,因为逻辑上就变为
begin
begin
commit
commit
把代码改为
Java codeA.method1(){ beginTransaction(); try{ //business commitTransaction(); B.business();//放到commit下面 }catch(Exception e){ rollback(); }}
编译上是没有问题,但是在catch里面,rollback的时候是rollback了哪个transaction呢?能保证出错后A和B所作的操作都rollback吗?
[解决办法]到群里来吧!你这问题不好解决,
建议你干脆就不要使用外面的事务了,比如
A.method1(){
B.business();
}
这样不就行了,你何必再自己封装一个呢!?
[解决办法]因为事务不能直接嵌套
如果在catch里回滚的话,应该是回滚try块里的
如果想A和B同时回滚的话用一个事务套住A和B的操作,应该可以o(∩_∩)o...
[解决办法]事务嵌套了吧
里面事务不依赖于外面的 就不会rollback
[解决办法]个人觉得那个transaction有异常就rollback那个transaction.
=================================
哇这里的人除了星星,就是星星的马甲
[解决办法]SomeManager.business(){
try{
A.method(){...}//这里有自己的begin, commit, 没有rollback
}catch(Exception e){
rollback();
throw e; //A出错,B就不会被执行到
}
B.method(){...}//有rollback
}
还是有问题
如果B有错误回滚了,但是A的操作已经commit了
[解决办法]如果A.method1除了调用B.business方法外,再没有其他的业务逻辑,干脆不使用外面的事务
就这样
A.method1(){
B.business();
}