这是我的第一个具有多对多关系的项目,在阅读了一些 ORM 的 grails 资料后,我决定让 grails 为我完成工作,比如创建表。实际上,我的交易是:
这是我的类(class):
class User {
String name
List groups
static hasMany = [groups : Group]
static mapping = {
table 'users'
version false
}
}
class Group {
String name
List members
static belongsTo = User
static hasMany = [members : User]
static mapping = {
table 'groups'
version false
}
}
在那之后,我从 grails 得到的是 3 张 table 。 用户 table 还可以,但接下来的 2 不是我所期望的。
table **groups** | id | name
table **users_groups** | group_id | user_id | members_idx | groups_idx
好吧,我想要的是这样的:
table **groups** | id | name | user_id
table **users_groups** | group_id | members_idx | groups_idx
我不知道我是否做错了什么或如何解决它,但无论如何......当我尝试执行 user.addToGroups(new Group()) 时,我仍然遇到另一个问题。我的 用户组 表复制了这个寄存器,一个是 members_idx 为空,另一个是 groups_idx 为空。
最佳答案
如何从组中删除 belongsTo 并离开 hasMany:
class User {
String name
List groups
static hasMany = [groups : Group]
static mapping = {
table 'users'
version false
}
}
class Group {
String name
List members
static hasMany = [members : User]
static mapping = {
table 'groups'
version false
}
}
编辑
我认为您必须创建一个域类,它实际上将加入组和用户。
我认为你应该试试这个:
class User {
String name
static hasMany = [groups : UsersGroups]
static mapping = {
table 'users'
version false
}
}
class Group {
String name
static hasMany = [members : UsersGroups]
static mapping = {
table 'groups'
version false
}
}
class UsersGroups {
static belongsTo = [group: Group, user: User]
static mapping = {
version false
}
}
它将创建另一个实际连接组和用户的表。
关于grails - 多对多和映射问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4716413/