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/

    10-14 02:30