第 5.2.1.1 节有示例 A - C,看起来有点混乱:
示例 B:这仍然是多对一的关系,如示例 A(即相同的表设置)吗?最后它说,“要实现真正的一对一,请使用 hasOne 属性......”。
示例C:当使用hasOne时,是否应该不再使用belongsTo?是暗示吗?
为什么他们在示例 C 中显示了两个变体?第一个容易出问题吗?
我试图了解所有有效的多对一和一对一组合。
谢谢
第 5.2.1.1 节有示例 A - C,看起来有点混乱:
示例 B:这仍然是多对一的关系,如示例 A(即相同的表设置)吗?最后它说,“要实现真正的一对一,请使用 hasOne 属性......”。
示例C:当使用hasOne时,是否应该不再使用belongsTo?是暗示吗?
为什么他们在示例 C 中显示了两个变体?第一个容易出问题吗?
我试图了解所有有效的多对一和一对一组合。
谢谢
我同意他们的术语在这里有点混乱。但我会尽力帮助:
他们在这里指的是父对象指向单个子对象的关系。然而,子对象不知道父关系。(我相信)他们称之为多对一的原因是没有强制执行唯一的一对一映射。从技术上讲,只需将相同的鼻子保存到关系中,就可以在多个面孔上使用它们。而且,如果您删除Face,则Nose继续存在,只是没有脸。 (这写起来很奇怪!)
在第二个示例中,他们添加了belongsTo
以强制建立一对一的关系。这意味着Nose的存在取决于Face的存在。所以,现在是真正的一对一关系。由于其配置方式,此关系的外键存储在Face表中(请参阅下一节)。
在最后一个示例中,它仍然是一对一的。但是,将 simple 更改Nose nose
为static hasOne = [nose:Nose]
已将外键移至Nose表。在这种情况下,您使用 ,belongsTo
因为每个Nose只能与单个Face相关。
Model model
创建一个单一的,与孩子的单向关系。child 没有直接的方式来引用 parent 关系,实际上可能与多个 parent 模型有关。belongTo
代为其父代,这也通过级联来强制数据完整性。hasOne
通过将父级配置为具有一个 ( ) 子级模型来创建存储在子级上的双向一对一。希望这会有所帮助。(我仍然认为多对一术语很尴尬。)