我打了一个灰色的细胞预告片,我真的很难理解,希望答案就在这里。
我有一个Grails域模型,涉及子类化,关联,子类化关联,直到现在一切正常。
我的域名与此相似..
class AssocationRecord
static belongsTo = [MasterRecord]
class AssocationRecordB extends AssocationRecord
// other fields
class MasterRecord
hasMany associations:AssocationRecord
class MasterRecordB extends MasterRecord
hasMany associations:AssocationRecordB
这个模型工作正常,我可以设计主要记录的子类特殊版本,直到...直到我想将一个AssociationRecord引入MasterRecord,使域名成为:
class MasterRecord
AssocationRecord favouriteAssociation
hasMany associations:AssocationRecord
有了这个介绍,一旦字段有了值,我就可以破解代码,只需尝试访问MasterRecordB实例中的集合
例如:MasterRecordB.first()。associations.each(){}
这将触发MissingMethodException异常(下面)
我看到对javaassist的引用,这可能是一个关于出了什么问题的线索吗?
如果我删除新字段,一切都会按预期恢复工作。我考虑为字段而不是对象存储ID,但它并不能帮助理解为什么我会看到这种行为。
谢谢,
groovy.lang.MissingMethodException: No signature of method: Script1$_run_closure1.doCall() is applicable for argument types: (mypackage.AssociationRecord_$$_javassist_109) values: [mypackage.AssociationRecordB : 22777]
Possible solutions: doCall(mypackage.AssociationRecordB), call(), call([Ljava.lang.Object;), call(java.lang.Object), call(mypackage.AssociationRecordB), findAll()
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:55)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:273)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at Script1.run(Script1.groovy:4)
at groovy.lang.GroovyShell.evaluate(GroovyShell.java:518)
at groovy.lang.GroovyShell.evaluate(GroovyShell.java:556)
at groovy.lang.GroovyShell.evaluate(GroovyShell.java:527)
at groovy.lang.GroovyShell$evaluate.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at org.grails.plugins.console.ConsoleService.eval(ConsoleService.groovy:37)
at org.grails.plugins.console.ConsoleService$eval.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:124)
at org.grails.plugins.console.ConsoleController.execute(ConsoleController.groovy:36)
at org.grails.plugins.console.ConsoleController.execute(ConsoleController.groovy)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springsource.loaded.ri.OriginalClassInvoker.invoke(OriginalClassInvoker.java:47)
...