2010-02-17 6 views
5

क्या यह कभी समझ में आता है?एक अन्य डीएओ से एक डीएओ को बुला रहा है?

कहें कि मुझे किसी ऑब्जेक्ट को डीबी से लाने की आवश्यकता है जिसका एक अन्य ऑब्जेक्ट (डीबी में एक विदेशी कुंजी द्वारा प्रतिनिधित्व किया गया है, और मेरे डोमेन ऑब्जेक्ट में एक रचना द्वारा) का संबंध है। यदि मेरे पहले डीएओ में मैं ऑब्जेक्ट 1 के लिए डेटा लाता हूं, तो ऑब्जेक्ट 2 के लिए दाओ को कॉल करें, और अंत में (पहले डीएओ के भीतर से, ऑब्जेक्ट 1 में सेटर को कॉल करें और इसे पहले प्राप्त ऑब्जेक्ट 2 दें)।

मुझे पता है कि मैं इसके बजाय शामिल हो सकता हूं, लेकिन यह कार्यक्षमता को कम करने के लिए मुझे और अधिक तार्किक लगता है (यही कारण है कि मैं एक दाओ को दूसरे से कॉल करने के बारे में संदेह कर रहा हूं)। या क्या मुझे कुछ तर्क सेवा स्तर पर ले जाना चाहिए?

धन्यवाद

अद्यतन: मुझे लगता है मैं जवाब की मदद से समस्या हल हो:

<one-to-one name="Object2" fetch="join" 
     class="com...Object2"></one-to-one> 

मैं नहीं था: सब मुझे क्या करना करने के लिए आवश्यक वस्तु 1 की मेरी मानचित्रण के लिए निम्न जोड़ने था कुछ और बदलना नहीं है। सहायता के लिए धन्यवाद!

+0

मैं कहता हूँ नहीं, मैं एक और धागा में विस्तार से बताया है | http://stackoverflow.com/questions/8988252/can-a-dao-call -डाओ –

उत्तर

9

यह पढ़ में मैं केवल यह है कि सबसे अधिक संभावना निष्कर्ष निकाल सकते हैं, आप गलत कर रहे ..;)

सही ObjectA और ObjectB (बीच अपनी मैपिंग आप सेटअप OneToOne, OneToMany या ManyToMany), हाइबरनेट हो सकता है (आलसी) स्वचालित रूप से ए से बी संदर्भ को लोड करेगा। यह दूसरे डीएओ से पूछताछ की आवश्यकता को खत्म कर देगा, और ऑब्जेक्टए में ऑब्जेक्टबी संदर्भ सेट करेगा।

इसे एक कदम आगे ले जाएं और आपको ऑब्जेक्टबी के लिए डीएओ की भी आवश्यकता नहीं हो सकती है!

+0

धन्यवाद .. यही वह है जो मैं काम कर रहा हूं। क्या मैं इस उदाहरण का एक उदाहरण प्राप्त कर सकता हूं कि यह मैपिंग कैसा दिखता है (मुझे Google पर बहुत भाग्य नहीं है)। साथ ही, मैपिंग्स सही के साथ, क्या मुझे अभी भी अपने डीएओ में "शामिल" निर्दिष्ट करने की आवश्यकता होगी? – oym

+0

@ es11: मुझे लगता है कि आपने अपनी समस्या हल कर ली है .. खुशी है कि मैं मदद कर सकता हूं। अपने प्रश्न का उत्तर देने के लिए: जो आपको मिला है वह पर्याप्त प्रतीत होता है, इसलिए नहीं, आपके मैपिंग के बाहर आपको डीएओ से अपनी ऑब्जेक्ट्स को पुनर्प्राप्त करते समय कोई भी शामिल होने की घोषणा नहीं करनी पड़ेगी। – Tim

+0

100% सहमत टिम! –

6

मैं व्यक्तिगत रूप से डीएओ के बीच संदर्भों से बचना पसंद करता हूं। मैं एक डेटा डीएओ एक और कार्रवाई करने के लिए द्वारा दिलवाया की जरूरत है मैं DAOs दसगुणा:

// Bad - have to inject Dao into antoher Dao 
class FooDao extends BaseDao { 
    BarDao barDao; 

    public Foo complexLoad() { 
    return doFooStuff(barDao.loadBar()); 
    } 
} 

// Good - dependency on Bar only, not to Dao 
class FooDao extends BaseDao { 
    public Foo complexLoad(Bar bar) { 
    return doFooStuff(bar); 
    } 
} 

तब मैं सेवा में दोनों DAOs इंजेक्षन।