2009-03-17 8 views
7

सामान्य में से एक को मैपिंग "एक" -साइड एसोसिएशन का मालिक है। ऐसे मैपिंग के लिए कोई भी संबंधित-मैपिंग का उपयोग क्यों करेगा? क्या मुझे कुछ निर्दिष्ट करने का दुष्प्रभाव याद आ रहा है?Grails/GORM: संबंधित का अर्थ 1 में: एन रिश्ते

दूसरे शब्दों में: GORM बनाम में एक संबंधित-मैपिंग निर्दिष्ट करने के प्रभाव क्या हैं इसे निर्दिष्ट नहीं करते?

उत्तर

19

संबंधित निर्दिष्ट करना चाहते हैं referential action के प्रकार पर निर्भर करता है।

आप Grails हटाएं पर करना चाहते हैं, CASCADE निर्देशात्मक कार्रवाई, तो belongsTo निर्दिष्ट करें। यदि आप Grails को हटाते हैं, तो हटाएं, 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

क्या मैं आपसे संबंधित प्रश्न पूछ सकता हूं? क्या होगा अगर मैंने प्लेयर को टीम से संबंधित बताया लेकिन मैंने यह नहीं बताया कि टीम के पास कई खिलाड़ी हैं। अगर टीम को हटा दिया गया तो प्लेयर के साथ क्या होता है, क्या वे भी हटाए जा रहे हैं? – nightingale2k1

+0

@ nightingale2k1 - मुझे लगता है कि यदि आपने टीम-प्लेयर मैप किया है तो इस तरह से दोनों के बीच कोई संबंध नहीं होगा, इसलिए एक खिलाड़ी जब संबंधित टीम हटा दी जाती है –

+0

बहुत अच्छी तरह से समझाया गया है, धन्यवाद – add9

2

संबंधित निर्दिष्ट करना Grails को पारदर्शी रूप से ऑब्जेक्ट के बच्चों को अपडेट, सहेजने और हटाए जाने की अनुमति देता है। इसके बिना, यदि आप एक मास्टर रिकॉर्ड को हटाने का प्रयास करते हैं, तो यदि आपके पास इसका कोई विवरण है तो आप एक विदेशी कुंजी उल्लंघन प्राप्त कर लेंगे।

संबंधित मुद्दे