GORM - временно отключить событие beforeInsert
Есть ли способ временно отключить событие beforeInsert определенного класса домена? Мне нужно выполнить следующие шаги:
- отключить выполнение beforeInsert;
- Выполнить своего рода подпрограмму saveAs в объекте;
- повторно включить выполнение 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 .....
}
}
}
Возможно, это не лучшее решение, но это одно из решений.