Отменить / заблокировать сохранение объекта домена по некоторым критериям? - PullRequest
0 голосов
/ 30 ноября 2011

У меня есть необходимость заблокировать или отменить сохранение объекта домена на основе какого-либо свойства.Можно ли это сделать в ограничении?

Пример: объект домена «Заказ» имеет состояние «выставлено», тогда заказ больше не может быть обновлен ..

Любые предложенияо том, как справиться с этим?

1 Ответ

2 голосов
/ 30 ноября 2011

Я не вижу причин, по которым вы не могли бы просто использовать ограничение для этого (как вы предлагали).Нечто подобное должно сделать это

class Order {

  String state

  static constraints = {

    state(validator: {stateValue, self ->

      // only check state if this object has already been saved
      if (self.id && stateValue == 'invoiced') {
        return false
      }
    })
  }
}

Если по какой-то причине вы не можете использовать ограничение, вот пара альтернативных предложений:

Мета-программирование

Используйте возможности перехвата методов Groovy для перехвата вызовов на save().Ваш перехватчик должен переадресовать вызов только на перехваченный save(), если у заказа нет выставленного состояния.

В книге Programming Groovy есть несколько хороших примеров

События GORM

GORM предоставляет ряд событий , которые запускаются в течение жизненного цикла постоянных объектов.В событиях beforeUpdate или beforeValidate может быть возможно предотвратить обновление объекта (я думаю, будет сгенерировано исключение)

...