Ebean乐观锁定 - 版本列与所有列?

时间:2013-01-23 08:59:36

标签: playframework-2.0 ebean optimistic-locking

我看到Ebean支持两种方式,但使用@version或所有方法之间的真实世界差异是什么?有什么理由不在Ebean到处使用@version吗?

http://www.avaje.org/occ.html

1 个答案:

答案 0 :(得分:1)

如果您自己控制模型,我不知道有任何理由继续使用“所有列”版本。我所看到的“全部”方法的优点是:

  1. 开发人员更容易 - 根本没有编码,所以这种方法对于那些不知道并发检查的开发人员来说也是如此。
  2. 这是万无一失的。通过根据预期值检查每一列,您可以确定您永远不会覆盖某人的更改
  3. 另一方面,效率较低(检查所有列比仅检查单个列更有用)。我也遇到了Play Framework中级联删除的问题,其中ebean认为数据库中的数据已经发生了变化。

    我可以提出的版本方案的缺点是

    • 如果您在更新对象时忘记更新版本字段,则不会对这些更新获得任何锁定保护。这个错误很难找到,因为一切都会在大部分时间内完美运行。
    • 如果您还没有数据库中的版本或“上次更改”字段,则必须添加一个新列,这会自然占用一些空间和时间。

    我认为这些缺点中的任何一个都不严重。如果你知道自己在做什么(并且你已经通过提出问题证明了这一点;))并且你确信你不会忘记更新你的版本字段,那么请继续!