gpt4 book ai didi

grails - 不需要的GORM表创建

转载 作者:行者123 更新时间:2023-12-02 15:22:33 25 4
gpt4 key购买 nike

我有两个 Realm 类,Person和Workshop。讲习类的所有者为Person类型,许多参与者为Person类型。一个人可以参加许多研讨会。在讲习类中注册人员时,我想像Workshop.AddToParticipants()这样从讲习类方面进行注册,因此这是我设置域类的方式。

class Person {
String name

static hasMany = [enrolledWorkshops: Workshop]
static belongsTo = [Workshop]

}

class Workshop {
Date startDate
Date endDate
String name

Person owner
static hasMany = [participants: Person]
}

GORM正确地创建了带有WORKSHOP_ID和PERSON_ID列的WORKSHOP_PARTICIPANTS表,并将OWNER_ID列添加到WORKSHOP表中。一切都很好。

但是,它还使用PERSON_ID和OWNER_ID列创建WORKSHOP_OWNER表!这对我来说毫无意义,而且无论我如何尝试更改GORM关系,如果不创建此烦人的额外表,我就无法使其按我的意愿工作。如何防止创建WORKSHOP_OWNER表?任何帮助是极大的赞赏! (如果有帮助,我正在使用Grails 2.3.7)

最佳答案

为了摆脱WORKSHOP_OWNER表,您必须在Workshop类中将Person owner替换为static belongsTo = [owner: Person]。但这将与Person类中的static belongsTo = [Workshop]冲突。两者都不能成为所有者。

试试这个:

class Person {
String name
}

class Workshop {
Date startDate
Date endDate
String name

static belongsTo = [owner: Person]
static hasMany = [participants: Participant]
}

class Participant {
person person

static belongsTo = [workshop: Workshop]
}

在上面的示例中, Person拥有 Workshop,而 Participant则由 Workshop拥有。 Workshop表将获得owner_id来引用该人,从而摆脱了workshop_owner表。

要将 Person添加到 Workshop中,您只需将其包装在 Participant
workshop.addToParticipants(new Participant(person: somePerson))

您可以在 Person中松开enrolledWorkshops属性,但可以通过查询完成相同的操作。
def workshops = Workshop.withCriteria {
participants {
eq 'person', somePerson
}
}

关于grails - 不需要的GORM表创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32895143/

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