TJ- TJ- - 1 year ago 50
Java Question

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.

A -> B -> C
-> D
-> 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
(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.

Answer Source

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)