2015-10-15 87 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