答案 0 :(得分:0)
是的,通过使用显式锁定。默认情况下,使用乐观锁定,这适用于您不希望进行并发编辑的许多情况,或者您希望它们不太可能。但是,如果您确实希望进行并发编辑,那么您应该让数据库为您完成工作。
在您的控制器或其他代码中,而不是像
那样def thing = Thing.get(params.id)
thing.properties = params
thing.save()
将代码移动到事务服务方法。默认情况下,服务是事务性的,因此不需要配置。在那里使用锁定方法,因为它必须在事务中完成,并且数据库更新应该在事务中完成:
class ThingService {
void updateThing(params) {
def thing = Thing.lock(params.id)
thing.properties = params
thing.save()
}
}
我的偏好是不是简单地传递params
地图,而是使用单个名称属性,但这与此问题无关。