Отключение блокировки для некритических классов домена Grails / GORM - PullRequest
1 голос
/ 17 ноября 2009

Предположим, что следующий код в контроллере 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 не вызывалось. Как мне этого добиться?

1 Ответ

5 голосов
/ 17 ноября 2009

Из отображение документов DSL : вы можете отключить его следующим образом:

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

Я сомневаюсь, что вы можете отключить его для определенного вызова.

...