【问题标题】:beforeUpdate afterUpdate更新前更新后
【发布时间】:2012-03-09 12:17:44
【问题描述】:

我们是否有 beforeUpdateOf*(其中 * 是某个字段?)

还有一个问题:

def beforeUpdate= { log.info("in beforeUpdate " +this.status) }

def afterUpdate = { log.info("in afterUpdate" +this.status) }

这两者都给出相同的状态。 虽然实际上 object(this) 的状态是从 x 更新到 y

【问题讨论】:

    标签: grails event-triggers


    【解决方案1】:

    当属性改变时没有事件,但你可以添加一个显式的 setter 来做某事:

    class MyDomainClass {
       String status
    
       void setStatus(String status) {
          this.status = status
          // do something based on changed value
       }
    }
    

    您在beforeUpdateafterUpdate 中看到相同的值,因为这些回调用于Hibernate 将更改的值保存到数据库中。在 Hibernate 开始和完成更新之间更改值是不寻常的。

    如果您要从数据库中查找原始值,可以使用 http://grails.org/doc/latest/ref/Domain%20Classes/getPersistentValue.html

    【讨论】:

    • 感谢您的提示!尽管“this.status = status”会引发无限递归,但要小心。我解决了在我的情况下调用 super.setStatus(newStatus) 的问题。
    【解决方案2】:

    您可能想看看 grails 审计插件:Audit LoggingAudit Trail

    【讨论】:

      猜你喜欢
      • 2022-11-12
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 2023-03-30
      • 2014-11-21
      • 1970-01-01
      相关资源
      最近更新 更多