2015-10-15 46 views
1

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

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

saveAs例程在特定对象中执行深克隆并使用相同数据创建新对象。看到这个答案,了解克隆:How can I duplicate a domain object in Grails?

原因禁用beforeInsert:由于对象被克隆内beforeInsert的代码被执行另存程序时并不需要执行。

的Grails版本:2.5.0

更新

我忘了提,我想避免改变我的域类来实现这一行为。

+0

嗨@cantoni,didi你找到最好的解决方案? –

+0

不幸的是,@HemãVidal。我的解决方案是避免使用beforeInsert事件。我的saveAs例程比beforeInsert中执行的代码重要得多。 – cantoni

+0

我认为这是一个概念问题: 如果.save()方法在某些情况下有所不同,控制器必须执行此操作并从域中删除此行为。 –

回答

2

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

class Person{ 

Boolean runBeforeInsert = true 

static transients = ['runBeforeInsert'] 

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

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

+0

谢谢@Uday。这是一个可能的解决方案,但我正在寻找一种非侵入性解决方案。我想避免更改我的域类。不管怎么说,还是要谢谢你! – cantoni