2009-03-17 8 views
7

В обычном сопоставлении «один-ко-многим» «один» является владельцем ассоциации. Зачем кому-либо использовать атрибут attribTo для такого отображения? Я пропустил какой-то побочный эффект, определяющий принадлежность?Grails/GORM: Значение принадлежит для отношений 1: N

Иными словами: каковы последствия указания атрибута toTo-mapping в GORM и не указывая его?

ответ

19

Укажите, пожалуйста, принадлежит зависит от типа referential action.

Если вы хотите Grails сделать на Delete, КАСКАД ссылочного действие, то DO указать belongsTo. Если вы хотите, чтобы Grails делал On Delete, RESTRICT ссылочное действие, то НЕ указывайте принадлежит.

например.

// "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. 
} 

Надеюсь, это поможет.

+0

Могу ли я задать вам вопрос, связанный с attribTo? Что делать, если я сказал, что принадлежит игроку команды, но я не сказал, что команда hasMany Player. если бы команда была удалена, что случилось с игроком, они также будут удалены? – nightingale2k1

+0

@ nightingale2k1 - Я думаю, что если вы сопоставили Team-Player таким образом, между ними не было бы никакой ассоциации, поэтому игрок, когда соответствующая команда будет удалена –

+0

, очень хорошо объяснила, спасибо – add9

2

Задать принадлежностьДля того, чтобы Grails прозрачно каскадировал обновления, сохраняет и удаляет дочерние объекты объекта. Без attribTo, если вы попытаетесь удалить основную запись, вы получите нарушение внешнего ключа, если у него есть какие-либо детали, которые он владеет.