gpt4 book ai didi

Grails 多对多没有 BelongsTo

转载 作者:行者123 更新时间:2023-12-02 15:29:51 27 4
gpt4 key购买 nike

如何制作域类以在 Grails 中创建“共享”数据但不“属于”另一个数据的表?例如,我想制作 2 张 table :

具有 2 个主要列的人员表
名称 - 技能
拉里 - 跳跃,大笑,拳击
curl - 哭,笑
萌 - 打洞、跳舞

包含 2 个主要列的技能表
姓名 - 人员
跳跃 - 拉里
哭泣 - curl
Laughing - 拉里, curl
冲床 - 拉里,萌
跳舞 - 萌

删除技能还会从“人员”表中删除该技能,而删除人员也会从“技能”表中删除该人员。我尝试了下面的域类,但是当我生成 View 时,我无法输入每个人的多个技能,反之亦然。

class Skill {
String name
Person person
static hasMany = [person: Person]

class Person {
String name
Skill skill
static hasMany = [skill: Skill]

我看过其他帖子,但解决方案通常有 3 个或更多类(通常是 Book、Author、Chapter)并且看起来非常复杂。

提前致谢

最佳答案

我认为你需要:

class Skill {
String name
}
class Person {
String name
static hasMany = [skills: Skill]
}

Grails 将创建一个名为 PERSON_SKILL 的第三个表,其中包含 person_id 和 Skill_id 作为列。在编辑您的人员对象具有的技能时,您实际上是在编辑第三张表中的记录。

删除人员记录将删除人员 ID 的所有相应人员技能记录。

要删除技能记录,您需要先手动删除技能 ID 的所有 person_skill 记录,然后才能删除技能记录。

实际上,技能充当静态数据表,因此不需要属于另一个域对象。我在我的系统中使用了几个这样的实例,Grails/GORM 似乎自动为 id 生成 obj1_by_obj2 链接表。

我认为您的 View / Controller /服务可以只处理 person.skills 集合(即添加、删除),然后让 Grails 将更新的集合持久保存到第三张表。

试一试。

关于Grails 多对多没有 BelongsTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21279223/

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