在我的应用程序中,每当调用服务类函数时,我都会在数据库中创建跟踪记录。以下是伪代码。
public Class A {
Tracer tracer;
B b;
void functionA () {
tracer.addTrace(input);
TransactionManger.getTransaction(); // Transaction starts.
result = b.functionB();
if(result == 0) {
// rollback
} else {
// commit
}
}
}
public Class B {
Tracer tracer;
int functionB () {
tracer.addTrace(input);
TransactionManger.getTransaction(); // Transaction starts.
// Do whatever. Return.
}
}
假设addTrace
函数将记录写入数据库,在上述情况下如果functionB
返回0,则添加到数据库中的跟踪将被回滚?如何避免这种情况?看起来MySQL不支持嵌套事务。因此,我无法在addTrace
中获取新事务并将其关闭,因此functionA
中的更改将不会在计算functionB
的结果之前提交。