Hibernate支持嵌套事务吗?
如果我有这个:Hibernate支持嵌套事务吗?,hibernate,transactions,Hibernate,Transactions,如果我有这个: Start transaction1 Call someMethod Start transaction2 Call someOtherMethod Start tranaction3 如果transaction3回滚,transaction2和transaction1是否也回滚 谢谢 虽然Hibernate不明确支持嵌套事务,但使用能够创建保存点的JDBC 3.0驱动程序可以实现这一点 创建会话工厂时,在程序开始时创建一个连接。此
Start transaction1
Call someMethod
Start transaction2
Call someOtherMethod
Start tranaction3
如果transaction3回滚,transaction2和transaction1是否也回滚
谢谢 虽然Hibernate不明确支持嵌套事务,但使用能够创建保存点的JDBC 3.0驱动程序可以实现这一点 创建会话工厂时,在程序开始时创建一个
连接
。此时,您还创建了一个保存点
,作为事务的起点
然后遍历每个嵌套事务。对于每个嵌套事务,您应该创建另一个不同的保存点,即rollingSavePoint,如果该嵌套事务失败,您可以回滚到该保存点。然后,对于同一嵌套事务,打开一个会话,该会话使用您在开始时创建的连接(即session nestedTransaction=SessionFactory.openSession(Connection))
,并进行更新。刷新会话并关闭它
完成所有嵌套事务后,调用connection.commit()
提交全局事务并关闭它。按照常规关闭sessionFactory,继续执行其他需要执行的操作
需要注意的一些事项:
- 显然,自动提交模式必须关闭,否则每次调用flush时,您将直接向数据库提交
- 如果您也在执行搜索或其他操作,您将希望打开使用自己连接的其他会话。确保将事务隔离级别设置为
READ\u uncommitted
,否则可能会遇到锁定问题
- 当然,您应该定期提交,否则您的数据库将出现问题,或者您可以增加数据库虚拟内存的大小
如果您正在使用spring,也可以使用spring传播。请检查此链接