0

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

4

1 回答 1

0

是的,通过使用显式锁定。默认情况下使用乐观锁定,这适用于您不期望并发编辑或者您认为它们不太可能发生的许多情况。但是,如果您确实希望同时进行编辑,那么您应该让数据库为您完成工作。

在您的控制器或其他代码中,而不是做类似的事情

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

于 2013-11-07T20:07:35.370 回答