2

我看到 Ebean 支持这两种方式,但使用 @version 或所有方法之间的实际区别是什么?有什么理由不在 Ebean 的任何地方使用 @version 吗?

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

4

1 回答 1

1

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

  1. 这对开发人员来说更容易——根本不涉及任何编码,因此这种方法甚至适用于不知道什么是并发检查的开发人员。
  2. 这是万无一失的。通过根据预期值检查每一列,您可以确保您永远不会覆盖某人的更改

另一方面,它的效率较低(检查所有列比仅检查单个列要多)。我在 Play Framework 中也遇到了级联删除问题,其中 ebean 认为数据库中的数据已更改。

我能想出的版本方案的缺点是

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

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

于 2013-03-21T15:38:51.220 回答