Springクラスを使用して1つのトランザクションを作成した以下のアクティビティを実行する以下のコードを記述しました。1行挿入しました。他のトランザクションを作成しました。別の行を挿入しました。コミットされた外部トランザクション。ロールバックされた内部トランザクション。
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
それは正しい振る舞いですか?外部トランザクションのコミットを許可する前に、内部トランザクションを最初にコミット/ロールバックするべきではありませんか?外部トランザクションがコミットされた場合、内部のロールバックはエラーをスローする必要がありますか?