Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nested Transaction using Spring and Hibernate

In my app, there are multiple steps where many commits to the database will be made sequentially through multiple methods. Example:

A -> B -> C
       -> D
           ->E
       -> F
  -> G

A calls B which calls C. Then B calls D. D calls E and so on. All of these methods have some database operations. As I understand from PROPAGATION_REQUIRED (declarative transaction management - the spring recommended way), if E completes successfully, the transaction (and operations in E will be committed). Now, due to some exception, F should lead to a rollback. I want to have everything rolled-back starting from what A did. Is this possible via Declarative Transaction management? Or should I use Programmatic Transaction Management?

Thank you.

like image 677
TJ- Avatar asked Aug 23 '11 04:08

TJ-


1 Answers

First, "nested" transactions, in the sense that there are multiple running transactions depending on each other, is not supported, afaik.

Then, propagation=REQUIRED means that all methods with that propagation will:

  • start a new transaction if there is none exists
  • participate in an existing transaction if such exists.

This means that in your scenario, a failure in F would rollback the entire transaction (because it is a single transaction, started by A, and propagated to other methods)

like image 152
Bozho Avatar answered Oct 19 '22 13:10

Bozho