不需要的 GORM table 创建
Unwanted GORM table creation
我有两个域 类,Person 和 Workshop。 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 table,并向 WORKSHOP table 添加了一个 OWNER_ID 列.这一切都很好。
但是,它还创建了一个 WORKSHOP_OWNER table 和 PERSON_ID 和 OWNER_ID 列!这对我来说毫无意义,无论我如何尝试改变 GORM 关系,如果不创建这个烦人的额外 table,我就无法让它按照我想要的方式工作。如何防止创建 WORKSHOP_OWNER table?任何帮助是极大的赞赏! (如果有帮助,我使用的是 Grails 2.3.7)
为了摆脱 WORKSHOP_OWNER table,您必须在创意工坊 class 中将 Person owner
替换为 static belongsTo = [owner: Person]
。但这会与 Person class 中的 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
拥有。车间 table 将得到一个 owner_id 来指代此人,这去掉了 workshop_owner table.
要将 Person
添加到 Workshop
,您只需将其包装在 Participant
中
workshop.addToParticipants(new Participant(person: somePerson))
您会在 Person
中丢失 enrolledWorkshops 属性,但您可以通过查询完成同样的事情。
def workshops = Workshop.withCriteria {
participants {
eq 'person', somePerson
}
}
我有两个域 类,Person 和 Workshop。 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 table,并向 WORKSHOP table 添加了一个 OWNER_ID 列.这一切都很好。
但是,它还创建了一个 WORKSHOP_OWNER table 和 PERSON_ID 和 OWNER_ID 列!这对我来说毫无意义,无论我如何尝试改变 GORM 关系,如果不创建这个烦人的额外 table,我就无法让它按照我想要的方式工作。如何防止创建 WORKSHOP_OWNER table?任何帮助是极大的赞赏! (如果有帮助,我使用的是 Grails 2.3.7)
为了摆脱 WORKSHOP_OWNER table,您必须在创意工坊 class 中将 Person owner
替换为 static belongsTo = [owner: Person]
。但这会与 Person class 中的 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
拥有。车间 table 将得到一个 owner_id 来指代此人,这去掉了 workshop_owner table.
要将 Person
添加到 Workshop
,您只需将其包装在 Participant
workshop.addToParticipants(new Participant(person: somePerson))
您会在 Person
中丢失 enrolledWorkshops 属性,但您可以通过查询完成同样的事情。
def workshops = Workshop.withCriteria {
participants {
eq 'person', somePerson
}
}