If I have this:
Start transaction1
Call someMethod
Start transaction2
Call someOtherMethod
Start tranaction3
If tran
While Hibernate does not explicitly support nested transactions, using a JDBC 3.0 driver that is able to create savepoints can achieve this.
Create a Connection
at the start of the program when the SessionFactory
is created. At this point you also create a Savepoint
that serves as the starting point for the transaction.
Then you move through each nested transaction. For each nested transaction, you should create another different savePoint i.e. a rollingSavePoint which you can rollback to should that nested transaction fail. Then for that same nested transaction, open a session that uses the Connection
you created at the start (i.e. Session nestedTransaction = SessionFactory.openSession(connection))
and make your updates. Flush the session and close it.
After all nested transactions are completed, call connection.commit()
to commit the global transaction and close it. Close the sessionFactory as per usual and continue to do whatever else you need to do.
Some things to note:
READ_UNCOMMITED
or else you'll probably be facing locking problems.If you are using spring you can also use Spring Propagation.Check this link http://www.byteslounge.com/tutorials/spring-transaction-propagation-tutorial