2013-06-03 7 views
5

Queste sono le mie classi di dominio:Non proprietario definito tra classi di dominio: relazione molti a molti

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

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

Se provo ad usare così come sono ho No owner defined between domain classes. Quindi ho bisogno di impostare il proprietario della relazione. L'aggiunta di static belongsTo = Game a User causa Domain classes cannot own each other in a many-to-many relationship.

L'unica altra opzione che posso pensare è aggiungere static belongsTo = User alla classe Game ma ho già un belongsTo lì.

Come modellare questo?

risposta

1

Prova questo:

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

forse sarebbe meglio non usare "belongsTo" a tutti? Voglio dire utilizzando semplici riferimento di campo come

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

FYI, Starei attento con l'utilizzo di "proprietario" nome del campo, potrebbe causare problemi quando viene utilizzato in qualche modo in una chiusura che ha il suo riferimento "proprietario" (ad esempio, in criteri builder) so che ha causato problemi nel graal 1.3.X, non so se è ancora il caso

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

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

dovrete specificare un lato del rapporto, in quanto il proprietario, facendo questo renderete la classe di dominio User come proprietaria della relazione molti a molti.

I controlli di campo belongsTo in cui è possibile utilizzare i metodi dinamici addTo*() da . siamo in grado di chiamare User.addToGames() perché GamebelongsTo User. non possiamo chiamare Game.addToPlayers().

+0

Ho lo stesso modello di dati e questo non funziona (MESSAGGIO DI ERRORE: Nessun proprietario definito tra classi di dominio [gioco di classe] e [utente di classe] in una relazione molti-a-molti Esempio: static appartiene a = Utente). la tua risposta è solo un'altra notazione gorm che significa esattamente la stessa cosa – pebbles

0

provare questo:

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

queste impostazioni lavoro per me. Ed ecco un buon thread per mappedBy: GORM mappedBy and mapping difference

Problemi correlati