2012-02-21 17 views
5

मेरे पास 2 ऑब्जेक्ट्स हैं, ObjectA और ObjectBमैं GORM में वैकल्पिक एक-से-एक संबंध कैसे रख सकता हूं?

जब ObjectA बनाया जाता है, ObjectB नहीं है (और नहीं कर सकते हैं, कारण अभी तक डेटा नहीं होने के लिए) अभी तक अस्तित्व में।

एक बार ObjectB बनाई गई है, यह एक इसी ObjectA यह से जुड़ी है, तो एक उचित एक मौजूद की जरूरत है। यदि कोई उचित ObjectA नहीं है, तो नया ObjectB बस एक से कनेक्ट नहीं है।

तो, सभी ObjectA उदाहरणों अंततः एक ObjectB से जुड़ी होगी जा, लेकिन सभी ObjectB उदाहरणों एक ObjectA होगा।

अनिवार्य रूप से, मैं इस तरह डेटाबेस तालिकाओं का निर्माण करने के GORM के लिए देख रहा हूँ:

ObjectA 
- Id (NotNull, unique) 
- ObjectB_Id[FK: ObjectB.Id] (unique) 

ObjectB 
- Id (NotNull, unique) 

मैं कैसे एक साथ GORM डोमेन कक्षाओं यह करने के लिए रख सकते हैं?

मैं कोशिश की है बस के बारे में hasOne, belongsTo, कच्चे गुण, nullable: true और unique: true की कमी के हर संयोजन मैं के बारे में सोच सकते हैं, लेकिन मैं चाहिए एक लापता हो। ऐसा लगता है कि यह विशेष रूप से विषम परिदृश्य है, इसलिए इसे पूरा करने के लिए कुछ तरीका होना चाहिए।

Class ObjectA { 
    ObjectB objectB 

    static constraints = { 
     objectB nullable: true, unique: true 
    } 
} 

Class ObjectB { 
    static belongsTo = [objectA: ObjectA] 

    static constraints = { 
     objectA nullable: true 
    } 
} 

इस के साथ ही पकड़ है कि मैं चारों ओर पाने के लिए नहीं कर पा रहे हैं कि यह निर्धारित करने के लिए संभव है:

उत्तर

5

जैसा कि अक्सर मामला है, मेरे विचार में एक प्रश्न में एक साथ डाल समाधान के लिए मुझे नेतृत्व ObjectB.objectA को ObjectA पर जो पहले से ही ObjectB से जुड़ा हुआ है। नए एसोसिएशन को सहेजते समय, जीओआरएम सिर्फ एसोसिएशन को सेव नहीं करता है। कोई त्रुटि नहीं फेंक दी गई है, और डेटाबेस से बाहर ObjectB खींचने से यह objectA संपत्ति अनसेट हो जाती है।

objectAObjectB कक्षा में बाधाओं को जोड़ने में मदद नहीं करता है। चुपचाप असफल होने के बजाय, एक त्रुटि फेंक दी गई है जो इंगित करता है कि एक सेट सेट पैरामीटर के कारण विशिष्टता जांच विफल हो रही है।

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

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