Если вложенная транзакция создана через getTransaction()
, то ее откат приведет к невозможности коммита охватывающей транзакции. Например:
void methodA() { Transaction tx = persistence.createTransaction(); try { // (1) вызываем метод, создающий вложенную транзакцию methodB(); // (4) в этот момент будет выброшено исключение, т.к. транзакция // помечена как rollback only tx.commit(); } finally { tx.end(); } } void methodB() { Transaction tx = persistence.getTransaction(); try { // (2) допустим здесь возникло исключение tx.commit(); } catch (Exception e) { // (3) обрабатываем его и выходим return; } finally { tx.end(); } }
Если же транзакция в methodB()
будет создана через createTransaction()
, то ее откат не окажет никакого влияния на коммит охватывающей транзакции в methodA()
.