Hibernate grails:如果已经在执行更新,则将更新操作排队

Hibernate grails:如果已经在执行更新,则将更新操作排队,hibernate,grails,gorm,Hibernate,Grails,Gorm,如果已在对象上执行更新,我可以将更新操作排队,以避免数据库过时状态异常。在grails中有没有办法做到这一点?是的,通过使用显式锁定。默认情况下,使用乐观锁定,这适用于您不希望同时进行编辑或不太可能进行编辑的许多情况。但是如果您确实希望并发编辑,那么应该让数据库为您完成这项工作 在控制器或其他代码中,而不是执行以下操作 def thing = Thing.get(params.id) thing.properties = params thing.save() 将代码移动到事务服务方法。默认情

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

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

在控制器或其他代码中,而不是执行以下操作

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()
   }
}

我的偏好是不要简单地传递
参数
映射,而是使用单独的名称属性,但这与此问题无关。

谢谢您的回答。还有一个问题,是否在保存后自动释放锁?在事务结束时释放锁。