Section 5.2.1.1包含示例A-C,这似乎有些令人困惑:
范例B:这是否仍然像范例A一样是多对一的关系(即相同的表格设置)?最后,它说:“要实现真正的一对一,请使用hasOne属性...”。
例C:使用hasOne时,应该不再使用belongsTo吗?是暗含的吗?
为什么它们在示例C中显示两种变化?第一个容易出现问题吗?
我试图了解所有有效的“多对一”和“一对一”组合。
谢谢
最佳答案
我同意他们的术语在这里有点令人困惑。但我会尽力帮助:
多对一(A)
他们在这里指的是父对象指向单个子对象的关系。但是,子对象不了解父级关系。他们之所以称其为“多对一”,是因为没有实施唯一的一对一映射。从技术上讲,只需将它们保存到关系中,就可以在多个“面孔”上使用同一 Nose 。而且,如果您删除脸部,则 Nose 会继续存在,只是没有脸部。 (这太奇怪了!)
一对一存储在父表(B)中
在第二个示例中,他们添加了belongsTo
来强制一对一关系。这意味着 Nose 的存在取决于脸部的存在。因此,现在这是一个真正的一对一关系。由于这种关系的外键配置方式,它存储在Face表中(请参阅下一节)。
子表(C)一对一存储
在最后一个示例中,它仍然是一对一的。但是,将简单的Nose nose
更改为static hasOne = [nose:Nose]
会将外键移至“ Nose ”表。在这种情况下,请使用belongsTo
,因为每个 Nose 只能与一个人脸相关。
综上所述
Model model
为 child 创建一个单向关系。子级没有直接引用父级关系的方法,实际上,它可能与多个父级模型相关。 belongTo
编码,这也通过级联实现了数据完整性。 hasOne
)子模型来创建存储在子级上的双向一对一。 希望这会有所帮助。 (我仍然认为多对一术语很尴尬。)
关于grails - grails 1.3.7 + 2.0,第5.2.1.1节,多对一和一对一,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7055216/