1

假设 Grails 控制器中有以下代码:

def action = {
  ClassName o = ClassName.findByFoo(params.foo)
  if (o) {
    o.counter += 1
  }
}

默认情况下,Grails 通过默认version添加到所有 GORM 数据库表的列使用乐观锁定。但是,如果有足够多的多个并发请求发送到此操作,乐观锁定机制将崩溃,并出现以下异常:

org.hibernate.StaleObjectStateException:
  Row was updated or deleted by another transaction (or unsaved-value mapping was 
  incorrect): [ClassName#id]

对于失败的更新/删除完全不重要的域对象,我想禁用锁定机制,这样就不会抛出 StaleObjectStateException。我该如何做到这一点?

4

1 回答 1

5

映射 DSL 文档:您可以禁用它:

class Person {
  ..
  static mapping = {
      table 'people'
      version false
  }
}

我怀疑您可以为特定呼叫禁用它。

于 2009-11-17T18:45:32.803 回答