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 に答える