【发布时间】:2013-11-07 19:49:08
【问题描述】:
如果已经对对象执行更新,我可以将更新操作排队,以避免数据库过时状态异常。有没有办法在 grails 中做到这一点?
【问题讨论】:
标签: hibernate grails grails-orm
如果已经对对象执行更新,我可以将更新操作排队,以避免数据库过时状态异常。有没有办法在 grails 中做到这一点?
【问题讨论】:
标签: hibernate grails grails-orm
是的,通过使用显式锁定。默认情况下使用乐观锁定,这适用于许多您不期望并发编辑或您认为它们不太可能发生的情况。但是,如果您确实希望同时进行编辑,那么您应该让数据库为您完成工作。
在您的控制器或其他代码中,而不是做类似的事情
def thing = Thing.get(params.id)
thing.properties = params
thing.save()
将代码移至事务服务方法。服务默认是事务性的,所以不需要配置。在这里使用 lock 方法,因为它必须在事务中完成,并且无论如何数据库更新都应该在事务中完成:
class ThingService {
void updateThing(params) {
def thing = Thing.lock(params.id)
thing.properties = params
thing.save()
}
}
我的偏好不是简单地传递 params 映射,而是使用单个名称属性,但这与此问题无关。
【讨论】: