我已经编写了下面的代码来执行以下活动,我使用 Spring 类创建了一个事务。插入一行。创建了其他交易。插入另一行。提交的外部事务。回滚内部事务。
TransactionStatus trxstsOuter= dsTrxMngr.getTransaction(null);
jdbcTemplate.update("insert into kau_emp values(6,'xyz' )");
TransactionStatus trxstsInner= dsTrxMngr.getTransaction(null);
jdbcTemplate.update("insert into kau_emp values(7,'pqr' )");
dsTrxMngr.commit(trxstsOuter);
System.out.println("trxstsOuter.isCompleted()" + trxstsOuter.isCompleted());
System.out.println("trxstsInner.isCompleted()" + trxstsInner.isCompleted());
dsTrxMngr.rollback(trxstsInner);
System.out.println("trxstsInner.isCompleted()" + trxstsInner.isCompleted());
我观察到这两行都提交给 DB !输出是
trxstsOuter.isCompleted()true
trxstsInner.isCompleted()false
trxstsInner.isCompleted()true
这是正确的行为吗?在允许外部事务提交之前,不应该首先提交/回滚内部事务吗?如果外部事务被提交,内部事务的回滚是否应该抛出错误?