如果我有这个:
Start transaction1
Call someMethod
Start transaction2
Call someOtherMethod
Start tranaction3
如果transaction3回滚,transaction2和transaction1也会回滚吗?谢谢!
如果我有这个:
Start transaction1
Call someMethod
Start transaction2
Call someOtherMethod
Start tranaction3
如果transaction3回滚,transaction2和transaction1也会回滚吗?虽然Hibernate不明确支持嵌套事务,但使用能够创建保存点的JDBC 3.0驱动程序可以实现这一点。
在程序开始时创建一个Connection
对象,并在此时创建一个Savepoint
,它作为事务的起始点。
然后您可以遍历每个嵌套事务。对于每个嵌套事务,应创建另一个不同的savePoint,即rollingSavePoint,如果该嵌套事务失败,则可以回滚到该点。然后,针对该嵌套事务,打开一个使用您在开始时创建的Connection
的session(即Session nestedTransaction = SessionFactory.openSession(connection)
),并进行更新。刷新会话并关闭它。
完成所有嵌套事务后,调用connection.commit()
来提交全局事务并关闭它。像往常一样关闭sessionFactory,然后继续做其他需要做的事情。
注意以下几点:
READ_UNCOMMITED
,否则您可能会面临锁定问题。如果您正在使用Spring,则还可以使用Spring Propagation。请查看此链接http://www.byteslounge.com/tutorials/spring-transaction-propagation-tutorial