我尝试覆盖某些域的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
PurposeReturns 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/