5

这些是我的域类:

class Game {
    static hasMany = [players: User]
    static belongsTo = [owner: User]
}

class User {
    static hasMany = [games: Game]
}

如果我尝试按原样使用它们,我会得到No owner defined between domain classes. 所以我需要设置关系的所有者。添加static belongsTo = GameUser原因Domain classes cannot own each other in a many-to-many relationship

我能想到的唯一其他选择是添加static belongsTo = UserGame课程中,但我已经有了belongsTo

我该如何建模?

4

4 回答 4

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()

于 2013-06-06T13:59:21.513 回答
1

尝试这个:

class Game {
    User owner
    static hasMany = [players: User]
    static belongsTo = User
}
于 2013-06-03T12:12:56.087 回答
0

也许根本不使用“belongsTo”会更好?我的意思是使用简单的字段引用,例如

class Game {
    User owner
    static hasMany = [players: User]
}

仅供参考,我会小心使用“所有者”字段名称,当以某种方式在具有自己的“所有者”引用的闭包中使用时可能会导致问题(例如在标准构建器中)我知道它在 grails 1.3.X 中引起了问题,不知道是不是还是这样

于 2013-06-03T16:59:22.740 回答
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

于 2017-01-31T12:15:15.983 回答