Деактивиране на заключването за некритични 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