2

我想我对如何使用 Savepoints 有误解。也许有人可以为我清除它。我将我的例子展示为我正在尝试做的事情,以及我所经历的事情。

我的应用程序正在执行某个程序。在该过程(和相关的数据库操作)之前,我创建了一个保存点。在该过程中,我启动了一个 select for update,它创建了许多锁:

lock1 - 持续时间=事务,类=行,类型=意向行=大数字

lock2 - 持续时间=事务,类=行,类型=WriteNoPK 行=大数字

如果该 java 过程成功,则关联的 DB 事务通过提交完成。但是,如果 java 过程失败,我还想回滚任何关联的数据库操作。我一直在尝试这样做:

conn.rollback(mySavepoint);

但是,这并没有释放由数据库操作创建的表锁(上面)(我以为我只是通过 conn.rollback(mySavepoint); 回滚)

我已经用两个数据库测试了这种行为:Sybase 和 Derby。

为什么会这样?

我真的需要在 conn.rollback(mySavepoint) 之后提交吗???这似乎有点违反直觉。

4

0 回答 0