grails - 使用Domain.load()代理替代Domain CRUD方法

标签 grails gorm

我尝试覆盖某些域的delete()方法。
我在Bootstrap.init()方法中使用了以下代码:

    grailsApplication.domainClasses.each { clazz ->

        clazz.newInstance() // method to trigger metaclass wiring

        def gormDelete = clazz.metaClass.getMetaMethod('delete')
        clazz.metaClass.delete = { ->
            println "OVERRIDED DELETE() VERSION"
            // Code
            return gormDelete.invoke(delegate)
        }
    }

当我有一个“真实的”域类(使用新的Domain()或Domain.get(),...)时,此解决方案有效,但在使用Domain.load()方法时,该解决方案不起作用。

Domain.load(1).delete()使用标准的GORM delete()方法,而不是我的替代版本。

load()方法返回的类是一个代理(Domain _ $$ _ javassist_XX),这说明了为什么它不使用我的重写方法。

如何覆盖域CRUD方法和关联的域代理?

谢谢你的帮助 :)

最佳答案

ref-doc明确指出:

load
Purpose

Returns a proxy instance of the domain class for the given identifier.


如果您仍然想使用load()而不是get(),则还必须覆盖load()

关于grails - 使用Domain.load()代理替代Domain CRUD方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28763730/

相关文章:

grails - Grails/GORM —使用 'hasMany'将关联映射到整个类层次结构

hibernate - 查询与扩展域类的关系

heroku - Grails GraphQL插件-部署到Heroku时 Controller 未运行

tomcat - REST URL 映射不起作用(Grails 1.3.3、Tomcat6)

hibernate - 约束条件查询以获取笛卡尔积并返回结果作为对象数组列表

java - 使用 `where values in list`的Grails GORM 3.2.0查询

grails - Grails-gorm false或NULL

java - 在命令对象中绑定(bind)集合时出错

Grails Shiro 插件 : confirming my understanding

grails - 任何想法,如何避免if语句在这里