我们如何在JDBC中实现嵌套事务?

时间:2011-07-14 19:18:53

标签: spring jdbc

首先让我解释一下嵌套事务的含义。

示例:在主类中说我们调用method1并使用jdbc [Transaction1]创建客户。它尚未提交。现在我们在主类中调用method2并为刚创建的客户[Transaction2]创建帐户。现在提交它。根据您的解释,这些交易将被视为一个交易的一部分(因为最多可以有一个连接的交易)。到此为止,如果我们比较上述情况,它就像Spring中的propagation_required。这是对的吗?

现在,如果我们想要提交transaction2而不是那个。那么这个场景就像Spring中的propagation_Nested。这是对的吗?

如果上述两个假设都正确,我们如何在JDBC中实现嵌套事务?

1 个答案:

答案 0 :(得分:3)

这不完全是嵌套事务的工作原理。如果回滚事务1,则事务2也会回滚。使用嵌套事务,您可以回滚事务2并仍然提交事务1。

在JDBC中,您可以使用保存点来实现此效果。您可以在创建帐户之前调用Connection.setSavepoint(),如果要回滚该操作但仍然提交客户创建,则可以回滚到该保存点。

如果您希望能够完全独立地提交/回滚两个事务,例如Spring REQUIRES_NEW,那么在JDBC中您应该使用两个连接并独立管理它们上的事务。