एक वसंत/हाइबरनेट आधारित परियोजना में, हमारे पास दो इकाइयों के बीच एक से अधिक संबंध हैं। आवश्यक संचालन हैं:क्या बिडरेक्शनल एसोसिएशन को हाइबरनेट करना चाहिए?
- बच्चे के माता-पिता को ढूंढें;
- माता-पिता के बच्चों को ढूंढें;
- जब माता-पिता को हटाया जा रहा है, तो हमें बच्चों को हटाने की भी आवश्यकता है;
- बच्चों को बड़े पैमाने पर बनाएं।
हम इसे लागू करने के दो तरीकों से आए।
Bidirectional association: बच्चे इकाई
@ManyToOne
स्तंभ यह माता पिता को जोड़ने की है, और माता-पिता बच्चों की@OneToMany
आलसी-लोडेड संग्रह है। उपरोक्त सभी कार्यों के मॉडल में प्रदर्शन किया जा सकता है:child.getParent(); parent.getChildren(); //lazy loading session.delete(parent); //cascade removal of the children does the trick here session.save(parent); //cascade persist created the children
यूनिडायरेक्शनल संघ: बच्चे इकाई
@ManyToOne
स्तंभ यह माता पिता को जोड़ने है, लेकिन माता-पिता बच्चों के लिए किसी भी लिंक नहीं है। अधिकांश संचालन सेवा तरीकों में किया जाना चाहिए:child.getParent(); //still in the model Collection<Child> findChildren(Parent parent); //service method in ChildService void deleteChildren(Parent parent); //service method in ChildService void createChild(Parent parent, ... childAttributes); //service method in ChildService invoked for each new child.
पहले दृष्टिकोण को लागू करने के लिए आसान हो रहा है (आप हाइबरनेट व्यापक कार्यक्षमता का पुन: उपयोग कर सकते हैं), लेकिन हम में से कुछ समस्याओं का एक संभावित कारण के रूप में द्विदिश संघों को देखने के ।
बेहतर डिज़ाइन विकल्प क्या होना चाहिए? क्या बिडरेक्शनल दृष्टिकोण द्वारा बनाई गई कोई भी ज्ञात समस्या, प्रदर्शन या डिज़ाइन है?
क्या आप ऐसे स्रोत के बारे में जानते हैं जो बताता है कि काम करने के लिए आलसी लोडिंग कैसे प्राप्त करें? मुझे जेएसएफ परियोजना में इससे परेशानी थी। –
"हम में से कुछ बिडरेक्शनल एसोसिएशन को समस्याओं के संभावित कारण के रूप में देखते हैं" - क्या आप इन संभावित समस्याओं का नाम दे सकते हैं? –