乐观锁定"版本"字段与快照隔离级别

时间:2015-02-02 14:11:28

标签: sql isolation-level optimistic-locking snapshot-isolation

我想知道这两种乐观锁解决方案的优点/不便之处是什么:

  1. 使用“版本”字段并在更新期间检测更改(即使用 hibernate @Version注释)

  2. 对交易使用快照隔离级别

  3. 如果我是正确的,这2个解决方案具有相同的行为:如果在事务期间更新了行,则会抛出错误

    由于

1 个答案:

答案 0 :(得分:3)

这两个没有相同的行为。使用hibernate乐观并发,如果要编写的行在此期间被修改并修改回来,则可以。例如,+1后跟-1。也可以修改hibernate不检查的列。

快照隔离会检查所有列,但不会比较数据。任何写入,甚至是x = x等空写操作都会计数。

快照隔离还可以保证读取的时间点快照。你没有说明你打算用什么隔离级别(1)。我认为这不是SNAPSHOT。因此(2)可能会为您提供hibernate无法自行提供的保证。

Hibernate乐观并发适用于分离的实体。快照隔离无法做到这一点,因为它需要一个事务来包含您所做的所有操作。

请注意,这两种解决方案都不可序列化,因为它们可以验证写入但不能读取。