GORM - временно отключить событие beforeInsert

Есть ли способ временно отключить событие beforeInsert определенного класса домена? Мне нужно выполнить следующие шаги:

  1. отключить выполнение beforeInsert;
  2. Выполнить своего рода подпрограмму saveAs в объекте;
  3. повторно включить выполнение beforeInsert.

Подпрограмма saveAs выполняет глубокий клон в конкретном объекте и создает новый объект с теми же данными. Посмотрите этот ответ, чтобы понять клон: Как я могу дублировать объект домена в Grails?

Причина отключения beforeInsert: поскольку объект клонируется, код внутри beforeInsert не нужно выполнять при выполнении подпрограммы saveAs.

Версия Grails: 2.5.0

Обновить

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

1 ответ

Вы можете создать временное логическое поле в классе домена и, основываясь на значении этого поля, вы можете запустить свой код beforeInsert, например;

class Person{

Boolean runBeforeInsert = true

static transients = ['runBeforeInsert']

def beforeInsert(){
    if(runBeforeInsert){
         SOME CODE .....
    }
}
}

Возможно, это не лучшее решение, но это одно из решений.

Другие вопросы по тегам