grails - GORM-暂时禁用beforeInsert事件

标签 grails gorm grails-2.5

有一种方法可以暂时禁用特定域类的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/

    相关文章:

    hibernate - grails (GORM)/hibernate 中的多对多链接表

    grails - 获取Grails中域的特定属性

    hibernate - 没有这样的属性:类的整数:grails.orm.HibernateCriteriaBuilder

    grails - 转发而不是重定向,同时仍然滚动带有片段的页面

    mysql - Groovy SQL 中的 CASE 语句

    java - 我如何使用根目录 System.getProperty ("user.home")

    grails - 在Grails子查询中使用逻辑(或)

    grails - 如何在 Assets 管道中禁用摘要

    Grails 2.5.1 应用程序偶尔会丢失上下文根

    ajax - Grails-对每个请求执行检查