grails:如果正在执行更新,则对更新操作进行排队

时间:2013-11-07 19:49:09

标签: hibernate grails gorm

如果已经对对象执行了更新,则可以对更新操作进行排队,以避免数据库失效状态异常。有没有办法在grails中做到这一点?

1 个答案:

答案 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地图,而是使用单个名称属性,但这与此问题无关。