禁用非关键Grails / GORM域类的锁定

时间:2009-11-17 18:39:17

标签: hibernate grails gorm

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

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

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

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

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

1 个答案:

答案 0 :(得分:5)

来自mapping DSL docs:你可以这样禁用它:

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

我怀疑你可以为特定的电话禁用它。