2015-03-27 14 views
14

इस सवाल का शीर्षक काफी विरोधाभासी के बाद से मैं एक गैर रिलेशनल डेटाबेस में संबंधों को लागू करने की कोशिश कर रहा हूँ है ... :)वसंत डेटा MongoDB: "इकाई संबंधों" को कैसे कार्यान्वित करें?

लेकिन क्या मेरा मतलब है कि कैसे करने के लिए आवेदन मॉडल कक्षाओं में संस्थाओं के बीच संघों को परिभाषित है मोंगोडीबी के साथ काम करना

जेपीए के साथ काम करना अक्सर वस्तुओं के बीच संबंधों को परिभाषित करने के लिए @ManyToMany या @OneToMany एनोटेशन का उपयोग करता है। क्या वसंत डेटा मोंगोडीबी में कुछ समान है?

MongoDB अध्ययन मुझे एहसास हुआ कि वहाँ संघ के दो संभावित दृष्टिकोण हैं कि: संदर्भ और एंबेडेड डाटा

स्प्रिंग डेटा द्वारा किस का उपयोग किया जाता है? एसोसिएशन मोड को कॉन्फ़िगर करना संभव है?

उत्तर

9

आप एक अलग संग्रह में संदर्भित कक्षा को जारी रखने के लिए @DBRef एनोटेशन का उपयोग कर सकते हैं, अन्यथा दस्तावेज़ उसी दस्तावेज़ (जेसन) में जारी रहेगा। डीबीआरएफ के उपयोग के लिए mongodb ड्राइवर के लिए एक अतिरिक्त क्वेरी की आवश्यकता है, आपको प्रदर्शन समस्याओं का विश्लेषण करने के लिए इसे विचार करना चाहिए।

spring data documentation से

@DBRef - क्षेत्र पर लागू यह इंगित करने के लिए एक com.mongodb.DBRef का उपयोग कर संग्रहीत करने के लिए है।

7.3.4 DBRefs का उपयोग मानचित्रण ढांचे स्टोर करने के लिए बच्चे को दस्तावेज़ के भीतर एम्बेडेड ऑब्जेक्ट नहीं है। आप उन्हें अलग-अलग स्टोर भी कर सकते हैं और उस दस्तावेज़ को संदर्भित करने के लिए डीबीआरआईफ़ का उपयोग कर सकते हैं। जब ऑब्जेक्ट को मोंगोडीबी से लोड किया जाता है, तो उन संदर्भों को उत्सुकता से हल किया जाएगा और आप एक मैप किए गए ऑब्जेक्ट को वापस प्राप्त करेंगे जो ऐसा लगता है जैसे इसे आपके मास्टर दस्तावेज़ में एम्बेड किया गया था।

+2

@DBRef से सावधान रहें। आप संदर्भित दस्तावेजों के लिए अनुमानों का उपयोग करने में सक्षम नहीं होंगे। अर्थात। 'docA = {id: 1, anotherDoc: DBRef (id: 2)}' और 'docB = {id: 2, foo: bar}'। अब आप 'डॉक्टर' के लिए पूछताछ करते समय प्रक्षेपण का उपयोग कर सकते हैं, लेकिन मैं 'docB' पर लागू नहीं होगा। मेरा मतलब है, आप ** ** इस प्रक्षेपण की तरह कुछ नहीं कर सकते हैं '{anotherDoc.fooft}'। यह हमेशा पूरे 'docB' लाएगा। –

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