它由 Hibernate 层管理。它被称为“乐观锁定”,基本上它只更新具有已知版本的对象。喜欢:
UPDATE SET
%... fields ...%,
version = version + 1 --update version to a new value
WHERE
id = %obj id% --current object
AND version = %previous obj version%` --last known version
并在更新失败时抛出异常(顺便说一句,此时很难从这个错误中恢复,在大多数情况下你只是丢失了更新)。
如果您想确保保存数据,请尝试强制保存数据(并检查保存/验证错误):
try {
if (!obj.save(flush: true)) {
// validation error
}
} catch (OptimisticLockingFailureException e) {
// not saved
}
甚至在更新前锁定数据。仅当您有大量并发更新时它才有用。
MyDomain obj = MyDomain.lock(params.id) //now it's locked for update
// update fields
obj.save()
在http://grails.org/doc/latest/guide/GORM.html#locking查看更多关于 GORM 锁定的细节