Java 这是怎么发生的? 10次中有1次,10次中有9次一切正常(数据相同)。代码是多线程的 我可以提供其他细节,没问题。我已经找到了原因 事实证明,在一个用@Transactional注释的方法(我们称之为methodA)中,还有另一个用@Transaction

Java 这是怎么发生的? 10次中有1次,10次中有9次一切正常(数据相同)。代码是多线程的 我可以提供其他细节,没问题。我已经找到了原因 事实证明,在一个用@Transactional注释的方法(我们称之为methodA)中,还有另一个用@Transaction,java,postgresql,mybatis,transactional,Java,Postgresql,Mybatis,Transactional,这是怎么发生的? 10次中有1次,10次中有9次一切正常(数据相同)。代码是多线程的 我可以提供其他细节,没问题。我已经找到了原因 事实证明,在一个用@Transactional注释的方法(我们称之为methodA)中,还有另一个用@Transactional注释的方法(我们称之为methodB)。这个内部方法(methodB)抛出了一个异常,异常在methodA中被抛出,代码愉快地继续运行。然而,一旦myBatis看到异常,它就会回滚整个事务 大概是这样的: methodA (@Transac

这是怎么发生的?
10次中有1次,10次中有9次一切正常(数据相同)。代码是多线程的


我可以提供其他细节,没问题。

我已经找到了原因

事实证明,在一个用@Transactional注释的方法(我们称之为methodA)中,还有另一个用@Transactional注释的方法(我们称之为methodB)。这个内部方法(methodB)抛出了一个异常,异常在methodA中被抛出,代码愉快地继续运行。然而,一旦myBatis看到异常,它就会回滚整个事务

大概是这样的:

methodA (@Transactional)
begin
select * ....
update .....
methodB: select .... 
methodB: throw exception -> myBatis calls rollback
methodA: catch exception, go on
methodA: other code

同时我也找到了原因

事实证明,在一个用@Transactional注释的方法(我们称之为methodA)中,还有另一个用@Transactional注释的方法(我们称之为methodB)。这个内部方法(methodB)抛出了一个异常,异常在methodA中被抛出,代码愉快地继续运行。然而,一旦myBatis看到异常,它就会回滚整个事务

大概是这样的:

methodA (@Transactional)
begin
select * ....
update .....
methodB: select .... 
methodB: throw exception -> myBatis calls rollback
methodA: catch exception, go on
methodA: other code