【问题标题】:Disabling locking for non-critical Grails/GORM domain classes禁用非关键 Grails/GORM 域类的锁定
【发布时间】:2025-12-17 12:55:01
【问题描述】:

假设 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。我如何做到这一点?

【问题讨论】:

    标签: hibernate grails grails-orm


    【解决方案1】:

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

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

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

    【讨论】:

      最近更新 更多