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

  • 禁止执行beforeInsert;
  • 在对象中执行一种saveAs例程;
  • 重新启用beforeInsert的执行。

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

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

    Grails版本:2.5.0

    更新

    我忘了提到我要避免更改域类以实现此行为。

    最佳答案

    您可以在域类中创建一个 transient bool(boolean) 字段,并基于该字段的值可以运行beforeInsert代码,例如:

    class Person{
    
    Boolean runBeforeInsert = true
    
    static transients = ['runBeforeInsert']
    
    def beforeInsert(){
        if(runBeforeInsert){
             SOME CODE .....
        }
    }
    }
    

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

    关于grails - GORM-暂时禁用beforeInsert事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33150455/

    10-10 16:21