如何在grails域类中的update事件之前编写自定义侦听器

时间:2013-11-10 07:04:57

标签: hibernate grails grails-domain-class

我想为域类编写beforeUpdate事件的自定义侦听器: 我的项目中有很多域类。 我想创建自定义侦听器,并且在每个域类的beforeUpdate事件中我想要执行一些逻辑。

3 个答案:

答案 0 :(得分:2)

您可以在beforeInsert中设置全局beforeUpdateBootStrap.groovy,如:

import org.codehaus.groovy.grails.commons.GrailsDomainClass

class BootStrap {

  def grailsApplication

  def init = { servletContext ->
    grailsApplication.domainClasses.each { GrailsDomainClass gc ->
        gc.metaClass.beforeInsert = {
            log.debug "beforeInsert"
            //code here
        }
        gc.metaClass.beforeUpdate = {
            log.debug "beforeUpdate"
            //code here
        }
    }
  }

  def destroy = {}
}


如果您想为某些域类执行不同的操作,而对其他域类执行不同的操作

grailsApplication.domainClasses.each { GrailsDomainClass gc ->
    if(gc.metaClass.javaClass.equals(User) || gc.metaClass.javaClass.equals(Role)){
        gc.metaClass.beforeInsert = {
            log.debug "beforeInsert"
            //code here
        }
        gc.metaClass.beforeUpdate = {
            log.debug "beforeUpdate"
            //code here
        }
    } else ...
}

答案 1 :(得分:1)

扩展@ user1690588的答案,您还可以使用以下命令挑选您想要举办beforeInsert个活动的域类:

grailsApplication.getDomainClass('com.myapp.MyDomain')

答案 2 :(得分:0)

您可以将服务注入域类并在beforeUpdate事件上调用服务方法。并对多个域类使用相同的服务方法。 域类:

class TestDomain {

    transient testService

    def beforeUpdate() {
        testService.testMethod()
    }
}

服务类:

class TestService {

    def testMethod() {
        // Custom logic goes here
    }
}