Doctrine 2仅在更改的字段上进行乐观锁定

时间:2017-03-17 09:37:09

标签: symfony doctrine-orm

是否有人知道任何捆绑,或任何Doctrine计划实施新的乐观锁定策略,如Telerik框架中的那个?

http://docs.telerik.com/data-access/developers-guide/crud-operations/concurrency-control/data-access-tasks-define-model-concurrency-optimistic#checking_for_any_changes

这个策略非常好,因为它不使用版本号或时间戳,它会将输入的旧值与新值进行比较,并且仅针对更改的输入进行比较。

因此,如果我有两种不同的形式使用当前策略(时间戳或版本控制)更新同一实体,即使不更新相同的数据,也会有2个用户发生冲突。

1 个答案:

答案 0 :(得分:0)

我知道这对于互联网来说是一个相当古老的问题,因此,我将在理论上阐述如何做到这一点。

每列锁定意味着有一种机制可以检测每列的更改 - 因此要么对行进行哈希处理(或者我们关注的列),并且使用哈希比较来检测/跟踪更改,或者我们单独跟踪每个列

然后必须在每个请求的基础上应用此跟踪,以确定何时更改。这是正常的@Version装饰器逻辑适用的地方。

Telerik能够处理每列的更改,因为在浏览器中比较了信息(阵列比较,最有可能)。这是一种孤立的数据状态,在更新之前与其他浏览器/数据库不同步。

这里最简单的选择是不允许两个表单冲突(就数据而言)并删除锁定 - 或者 - 将表单数据与主表分离并允许它们单独更新(并与sql join合并) )。