我尝试覆盖某些域的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方法和关联的域代理?
感谢您的帮助:)
答案 0 :(得分:1)
答案 1 :(得分:0)
为什么要覆盖它们?向您的域添加remove()方法不会更好(更抽象):
void remove() {
delete()
}
并根据需要更改实施