GORM - 暂时禁用beforeInsert事件

时间:2015-10-15 13:55:36

标签: grails gorm grails-2.5

有一种方法可以暂时禁用特定域类的beforeInsert事件吗?我需要执行以下步骤:

  1. 禁用beforeInsert;
  2. 的执行
  3. 在对象中执行一种saveAs例程;
  4. 重新启用beforeInsert的执行。
  5. saveAs例程在特定对象中执行深度克隆,并创建具有相同数据的新对象。请参阅此答案以了解克隆:How can I duplicate a domain object in Grails?

    禁用beforeInsert的原因:由于克隆了对象,因此在执行saveAs例程时,不需要执行beforeInsert内的代码。

    Grails版本:2.5.0

    更新

    我忘了提到我想避免更改我的Domain Class来实现这种行为。

1 个答案:

答案 0 :(得分:3)

您可以在域类中创建一个瞬态布尔字段,并根据此字段的值运行您的beforeInsert代码,例如;

class Person{

Boolean runBeforeInsert = true

static transients = ['runBeforeInsert']

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

这可能不是最佳解决方案,但它是解决方案之一。