我有一个 Datamapper 模型,比如 XYZ。现在,有多个线程有时会使用此模型读取一行并尝试更新同一行 - 只有一个应该成功,这取决于 XYZ 的属性,比如 abc
class XYZ
include DataMapper::Resource
property :id # primary key
property :abc
end
现在:
obj = XYZ.get(some_id)
obj.update(abc: 10) # Assume abc column value was 5 earlier
这可能发生在几个线程中,也可能同时发生。此外,每个线程中 column 的新值abc
也不同。一次,当一个线程更新时abc
,其他人不应该。基本上我想做的是通过datamapper运行这个查询:
UPDATE `xyz` SET `abc` = 20 WHERE `id` = <some id> AND `abc` = 5
该model.update
函数不允许更新属性并同时放置该属性的条件。我知道我可以直接运行 SQL 查询;但还有其他方法吗?