为什么在我的Grails域中引入一个字段会断开多个关系

时间:2015-01-07 13:12:55

标签: grails gorm

我打了一个灰色的细胞预告片,我真的很难理解,希望答案就在这里。

我有一个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)
  ...

0 个答案:

没有答案