这些是我的域类:
class Game {
static hasMany = [players: User]
static belongsTo = [owner: User]
}
class User {
static hasMany = [games: Game]
}
如果我尝试使用它们,我会No owner defined between domain classes
。所以我需要设置关系的所有者。将static belongsTo = Game
添加到User
会导致Domain classes cannot own each other in a many-to-many relationship
。
我能想到的唯一其他选择是将static belongsTo = User
添加到Game
课程,但我已经有belongsTo
。
我该如何建模?
答案 0 :(得分:5)
class Game {
User owner
static hasMany = [players: User]
static belongsTo = User
}
class User {
static hasMany = [games: Game]
}
您必须指定关系的一方作为所有者,通过这样做,您将User
域类作为多对多关系的所有者。
belongsTo
字段控制可以使用动态addTo*()
方法的位置
从。我们可以致电User.addToGames()
,因为Game
belongsTo
User
。我们无法致电Game.addToPlayers()
。
答案 1 :(得分:1)
试试这个:
class Game {
User owner
static hasMany = [players: User]
static belongsTo = User
}
答案 2 :(得分:0)
也许最好不要使用“belongsTo”?我的意思是使用简单的字段引用,如
class Game {
User owner
static hasMany = [players: User]
}
FYI, 我会小心使用“owner”字段名称,它可能会在某个闭包中以某种方式使用时出现问题,该闭包有自己的“所有者”引用(例如在条件构建器中) 我知道它在grails 1.3.X中引起了问题,我不知道是否仍然如此
答案 3 :(得分:0)
试试这个:
class Game {
User owner
static hasMany = [players: User]
static belongsTo = User
}
class User {
static hasMany = [games: Game, owns: Game]
static mappedBy = [games:'players', owns: 'owner']
}
此设置适合我。这是mappedBy的一个很好的线程:GORM mappedBy and mapping difference