1

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

  1. 禁用 beforeInsert 的执行;
  2. 在对象中执行一种 saveAs 例程;
  3. 重新启用 beforeInsert 的执行。

saveAs 例程在特定对象中执行深度克隆并创建具有相同数据的新对象。请参阅此答案以了解克隆:如何在 Grails 中复制域对象?

禁用 beforeInsert 的原因:由于对象是克隆的,所以在执行 saveAs 例程时不需要执行 beforeInsert 中的代码。

Grails 版本:2.5.0

更新

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

4

1 回答 1

3

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

class Person{

Boolean runBeforeInsert = true

static transients = ['runBeforeInsert']

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

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

于 2015-10-15T14:31:30.890 回答