一对多关联是使用grails在groovy中获取堆栈溢出错误.如果存在任何关联错误,请检查以下类和日志



一对多关联在groovy中使用grails获取堆栈溢出错误。请检查下面的类,错误日志,看看是否有任何关联。错误。

这就是我迄今为止所尝试的:

早期的关联是从B到C类,现在我们在更改了这个关联后将其修改为A到B类。更改对我来说很好,但当从A类访问b时,它抛出的stackoverflow错误是从A.groovy中获得getBs方法。如果我删除getBs,它会将null作为b,即使b在数据库中可用于该契约。同时调用其抛出的B.findAllByContract动态查找器方法无法解析属性"a",即使它在类级别可用。你能引导我到这里吗

class A implements Serializable {
static stampable = true
static auditable = true
static hasMany = [
bs: B]
static mapping = {
bs joinTable: [column: "a_id"]
}
static mappedBy = [ bs: "a"]
def getBs() {
println "calling ..."
return bs
}
}
class B implements Serializable { 
A a
static constraints = {
a nullable:true
}
static mapping = {
sort title: "asc"
a column: "a_id"
}
static transients = ['BValue']
}

错误日志:

2021-03-28 13:06:10,825 {yyyy-MM-dd HH:mm:ss} admin ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/app].[grailsDispatcherServlet] - Servlet.service() for servlet [grailsDispatcherServlet] in context with path [/app] threw exception [Handler processing failed; nested exception is java.lang.StackOverflowError] with root cause
java.lang.StackOverflowError: null
at org.codehaus.groovy.runtime.InvokerHelper.format(InvokerHelper.java:583)
at org.codehaus.groovy.runtime.InvokerHelper.format(InvokerHelper.java:575)
at org.codehaus.groovy.runtime.InvokerHelper.toString(InvokerHelper.java:130)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.println(DefaultGroovyMethods.java:642)
at org.codehaus.groovy.runtime.dgm$504.invoke(Unknown Source)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoMetaMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:251)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:59)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
at app.A.getBs(A.groovy:245)
at sun.reflect.GeneratedMethodAccessor878.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:1852)
at groovy.lang.ExpandoMetaClass.getProperty(ExpandoMetaClass.java:1155)
at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:3735)
at groovy.lang.ExpandoMetaClass.getProperty(ExpandoMetaClass.java:1167)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassGetPropertySite.getProperty(PogoMetaClassGetPropertySite.java:51)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307)
at app.A.getBs(A.groovy:246)
at sun.reflect.GeneratedMethodAccessor878.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:1852)
at groovy.lang.ExpandoMetaClass.getProperty(ExpandoMetaClass.java:1155)
at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:3735)
at groovy.lang.ExpandoMetaClass.getProperty(ExpandoMetaClass.java:1167)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassGetPropertySite.getProperty(PogoMetaClassGetPropertySite.java:51)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307)
at app.A.getBs(A.groovy:246)
at sun.reflect.GeneratedMethodAccessor878.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)

尝试更新方法getBs,如下所示:

def getBs() {
println "calling ..."
return this.bs
}

我认为引用bs可能就是递归调用getBs()

最新更新