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传播。请检查此链接