【发布时间】:2009-02-06 18:57:19
【问题描述】:
我们的旧版应用程序使用 JDBC 3.0。它通过实现自己的事务管理器来支持事务,该事务管理器能够为每个线程返回相同的 JDBC 连接。我最近发现的问题是它不支持嵌套事务:如果一个事务在另一个事务中启动,那么在内部事务的上下文中运行的每个 SQL 都将使用相同的数据库连接执行,并且当它被提交或回滚它将自动提交或回滚从外部事务开始的所有更改。
据我所知,我可以使用 JDBC 3.0 保存点实现对嵌套事务的支持:每当启动嵌套事务时,我都可以为当前连接设置一个新的保存点。之后,如果嵌套事务回滚,我将回滚到这个保存点。另一方面,如果它被承诺,我将什么也不做。只有最外层事务的提交才会将更改保存到数据库中。
这是正确的吗?这种方法有什么缺陷吗?如果是,我的可能性是什么?
谢谢。
【问题讨论】:
标签: java jdbc transactions