域类之间没有定义所有者:多对多关系

时间:2013-06-03 10:39:37

标签: grails gorm

这些是我的域类:

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

我该如何建模?

4 个答案:

答案 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