Отключение блокировки для некритических доменных классов Grails / GORM

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


person knorv    schedule 17.11.2009    source источник


Ответы (1)


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

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

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

person Jean Barmash    schedule 17.11.2009