gpt4 book ai didi

grails - 在同一个域类上多对多

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

我想建立一个既有 child 又有 parent 的“实体”类:

class Entity {
static hasMany [childs: Entity, parents: Entity]
}

但是我不知道如何映射我的数据(我应该使用mapledBy吗?)

我的测试:
@Test
void testEntityCanHaveAChild() {
Entityparent = new Entity()
Entitychild = new Entity()

parent.addToChilds(child)

assert parent.childs
assert parent.childs.size() == 1
assert parent.childs.contains(child)

assert child.parents
assert child.parents.size() == 1
assert child.parents.contains(parent)
}

所以我想从 parent 得到所有 child ,从 到 child 我想得到所有 parent

最佳答案

你不能那样做。

在一对多关联中,外键被放入“一个”部分。

现在从您的示例中我可以理解,如果人x是人y的 child ,那不意味着人y是人x的 parent 吗? x人可以有 parent :z人和t人?

我将首先讨论以下情况:人x只能有一个 parent ,如果x是y的 child ,那么y是x的 parent 。

对于这种情况,我将添加一个新列,parent_id,其默认值为null,并只说hasMany [children:Person]和belongsTo [parent:Person]
这解决了一个 child 只能有一个 parent 的情况。

对于另一种情况,当一个 child 可以有多个 parent 并且不必一定要让某人的 child 成为该 child 的 parent 时,有两种选择:
1. db列中的id列表(我不喜欢在关系数据库中,但是在NoSQL中是可以接受的)
2.连接表(2)。这可以是一个多态连接表,2个连接表或一个具有3列的连接表,其中一个始终为空。
然后,您需要向所有部分添加belongsTo。并手动设置联接表的映射。就像是:

   static mapping = {
hasMany joinTable: [name: 'parent_child_connection',
key: 'person_id',
column: 'parent_id']
}

关于grails - 在同一个域类上多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18253705/

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