2009-03-17 17 views
7

In una normale mappatura uno-a-molti il ​​"uno" -side è il proprietario dell'associazione. Perché qualcuno dovrebbe usare il mapping delle proprietà per tale mappatura? Mi manca qualche effetto collaterale di specificazione di proprietà?Grails/GORM: il significato di appartiene in 1: N relazioni

In altre parole: quali sono gli effetti della specifica di un mapping di proprietà in GORM rispetto a non specificarlo?

risposta

19

Se specificare appartiene al dipende dal tipo di referential action desiderato.

Se si vuole fare Grails On Elimina, CASCADE azione referenziale, quindi è necessario specificare belongsTo. Se si desidera Grails per fare On Delete, RESTRICT azione referenziale, quindi NON specificare appartiene a.

ad es.

// "belongsTo" makes sense for me here. 
class Country { 
    String name 
    static hasMany = [states:State] 
} 

class State { 
    String name; 
    // I want all states to be deleted when a country is deleted. 
    static belongsTo = Country 
} 

// Another example, belongsTo doesn't make sense here 
class Team { 
    String name 
    static hasMany = [players:Player] 
} 

class Player { 
    String name 
    // I want that a team should not be allowed to be deleted if it has any players, so no "belongsTo" here. 
} 

Spero che questo aiuti.

+0

Posso farti una domanda relativa a appartenere? e se ho detto a Player appartiene a Team, ma non ho dichiarato che la squadra ha molti giocatori. Se la squadra è stata eliminata, cosa succede con il giocatore, verrà cancellata? – nightingale2k1

+0

@ nightingale2k1 - Penso che se hai mappato Team-Player in questo modo non ci sarebbe stata alcuna associazione tra i due, quindi un giocatore quando la squadra corrispondente è stata eliminata –

+0

molto ben spiegato, grazie – add9

2

Specificare belongsTo consente a Grails di eseguire in cascata in modo trasparente gli aggiornamenti, i salvataggi e le eliminazioni sui figli dell'oggetto. Senza appartiene, se tenti di eliminare un record principale, finirai per ricevere una violazione di chiave esterna se possiede tutti i dettagli che possiede.

Problemi correlati