2013-06-03 7 views
5

sind meine Domain-Klassen sind:Kein Eigentümer zwischen Domain-Klassen definiert: viele zu viele Beziehung

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

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

Wenn ich versuche, sie zu benutzen, wie sie sind ich No owner defined between domain classes bekommen. Also muss ich den Besitzer der Beziehung festlegen. Das Hinzufügen von static belongsTo = Game zu User bewirkt Domain classes cannot own each other in a many-to-many relationship.

Die einzige andere Möglichkeit, die ich vorstellen kann, ist static belongsTo = User in die Game Klasse hinzuzufügen, aber ich habe bereits eine belongsTo dort.

Wie modelliere ich das?

Antwort

1

Try this:

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

vielleicht wäre es besser, gar nicht "belongsTo" zu benutzen? Ich meine, mit einfachen Feldbezug wie

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

FYI, Ich wäre vorsichtig mit „Eigentümer“ Feldnamen verwenden, kann es zu Problemen führen, wenn irgendwie in einem Verschluss verwendet, die ihre eigene „Besitzer“ Referenz hat (zB in Kriterien Builder) ich weiß, dass es Probleme zurück in Grails 1.3.X verursacht, weiß ich nicht, ob es

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

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

noch der Fall ist werden Sie haben eine Seite der Beziehung zu bestimmen, wie der Eigentümer, indem Dies werden Sie User Domain-Klasse als der Besitzer der vielen zu vielen Beziehung machen.

Die belongsTo Bereich steuert, wo die dynamischen addTo*() Methoden aus verwendet werden kann. Wir können User.addToGames() anrufen, weil GamebelongsTo User. Wir können Game.addToPlayers() nicht anrufen.

+0

Ich habe das gleiche Datenmodell und das funktioniert nicht (FEHLERMELDUNG: Kein Besitzer zwischen Domänenklassen [Klasse Spiel] und [Klasse Benutzer] in einer Viele-zu-viele-Beziehung definiert Beispiel: static oigsTo = Benutzer). Ihre Antwort ist nur eine andere Gorm-Notation, die genau dasselbe bedeutet – pebbles

0

versuchen Sie dies:

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'] 
} 

diese Einstellungen für mich arbeiten. Und hier ist ein guter Thread für mappedBy: GORM mappedBy and mapping difference