gpt4 book ai didi

grails - Grails GORM加载对象集合问题

转载 作者:行者123 更新时间:2023-12-02 15:14:24 25 4
gpt4 key购买 nike

我正在尝试在名为Contributor的类中加载评估列表,但由于无法通过测试而错过了一些东西。

我的测试是按预期方式创建和保存对象,因为当我执行Evaluations.list()和Contributor.list()并打印值时,我看到了保存的数据。

此外,当我选择评估并打印其“贡献者”属性的值时,它似乎是正确的。

但是,当我选择一个贡献者并打印其“评估”属性的值时,它为null。

我以为我的映射是问题吗?

class Contributor {
String name

static hasMany = [evals:Evaluation]

static mapping = {
id column: 'user_id'
evals joinTable:[name:'evaluation', column:'eval_id', key:'eval_user_id']
version false
}
}

class Evaluation {
Contributor contributor
String comment

static mapping = {
id column:'eval_id'
contributor column:'eval_user_id'
version false
}
}

谢谢。

最佳答案

您不应该像evals这样分配contributor.evals = [eval]。而是调用动态方法addTo*():contributor.addToEvals(eval)。这将为evals创建一个Hibernate集合,该集合将在以后保留。

第一个不起作用,因为在分配eval.contributor时Grails不会分配关联的另一端,即它不调用contributor.addToEvals(eval)。我不知道为什么-必须有一些实施原因。

因此contributor在Hibernate缓存中保留了相同的空evals。如果它不在高速缓存中,并且您重新读取它,它将填充evals,因为该关联仅映射在Eval表的外键上。

空的evals为空-这是另一个Hibernate功能:当集合为空时,它可以为空。知道吧

这是一篇很好的简短文章,解释了一些Hibernate内部原理:http://blog.xebia.com/2008/03/advanced-hibernate-proxy-pitfalls/

关于grails - Grails GORM加载对象集合问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6625304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com