2008-12-23 10 views
15

निबर्ननेट के भीतर एक-से-एक संबंध या तो "झूठी" या "प्रॉक्सी" को आलसी लोड किया जा सकता है। मैं सोच रहा था कि क्या कोई आलसी एक-से-एक मैपिंग करने का तरीका जानता है।NHibernate: एक-से-एक मैपिंग पर आलसी लोडिंग को सक्षम करने के लिए कैसे करें

मैं एक हैक बाहर काम एक आलसी सेट एक निजी क्षेत्र के लिए मैप किए का उपयोग कर, और सार्वजनिक संपत्ति है कि सेट के पहले परिणाम वापसी होने से एक ही परिणाम प्राप्त करने के लिए। यह काम करता है, लेकिन यह सबसे साफ कोड नहीं है ...

अग्रिम धन्यवाद!

उत्तर

20

एक-से-एक की आलसी लोडिंग तब तक समर्थित नहीं है जब तक कि संघ अनिवार्य नहीं है। तर्क के लिए here देखें।

यह इस तथ्य के क्रम तय करने के लिए करता है, तो रिश्ते के दूसरी तरफ मौजूद है (एन) हाइबरनेट डेटाबेस के लिए जाना पड़ता है कि करने के लिए निर्भर करता है। चूंकि आप पहले ही डेटाबेस हिट ले चुके हैं, इसलिए आप पूर्ण ऑब्जेक्ट को भी लोड कर सकते हैं।

हालांकि ऐसे मामले हैं जहां डीबी को मारने के लिए यह देखने के लिए कि संबंधित ऑब्जेक्ट वास्तव में वस्तु को लोड किए बिना मौजूद है या नहीं, (यदि संबंधित वस्तु बहुत "भारी" है), तो वर्तमान में यह एनएचबेर्नेट में समर्थित नहीं है।

+0

"जब तक संघ अनिवार्य नहीं है" का क्या मतलब है? – cbp

+12

और क्या होगा यदि 90% बार आप डेटाबेस को हिट करने के लिए भी नहीं जा रहे हैं यह देखने के लिए कि क्या यह अस्तित्व में है क्योंकि इसका उपयोग नहीं किया जाता है? डेवलपर अपने व्यक्तिगत उपयोग पर एनएचबीर्नेट से बेहतर जानते हैं, इस तरह कुछ ऐसा समर्थित होना चाहिए। – BradLaney

+0

@BradLaney, गैर बाधित = "सच" पक्ष पर, प्रॉक्सीफ़िंग के माध्यम से आलसी लोडिंग सीन के लिंक में समझाया नहीं जा सकता है। लेकिन [2010 के आरंभ से] (https://ayende.com/blog/4378/nhibernate-new-feature-no-proxy-associations), आलसी = "नो-प्रॉक्सी" एक-से-एक पर समर्थित है और कई -एक को। इस विकल्प के साथ, आलसी लोडिंग गैर-बाध्य पक्ष (एनएच 4 के साथ परीक्षण) पर काम करते समय पूछताछ करता है (यह प्रत्यक्ष लोड के मामले में नहीं है: अभी भी उत्सुक उत्सुकता है)। यह रूट इकाई को संबंधित इकाई के बजाय प्रॉक्सीफाइड प्राप्त करने का कारण बनता है, हालांकि कॉल को संबंधित इकाई संपत्ति में अवरुद्ध करने और आलसी लोड करने की अनुमति देने के लिए। –

4

जहां तक ​​मुझे पता है, एक-से-एक आलसी लोड करने के लिए एक गैर-हैकी तरीका नहीं है। मुझे आशा है कि मैं गलत हूं, लेकिन पिछली बार मैंने जांच की थी कि यह मामला था।

+4

2015 में कोई भी प्रगति इस मुद्दे के संबंध में है? –

+0

'आलसी =" नो-प्रॉक्सी "' [जनवरी 2010] से समर्थित है (https://ayende.com/blog/4378/nhibernate-new-feature-no-proxy-associations), किसी अन्य कारण से, लेकिन द्वारा रास्ता गैर 'बाधित' पक्ष पर आलसी लोडिंग को सक्षम बनाता है (एनएच 4 के साथ देखा गया)। (आलसी लोडिंग को 'बाधित' पक्ष पर लंबे समय तक समर्थित किया गया था, लेकिन कई लोग इस बिंदु को याद करते हैं। इसे देखें [उत्तर] (/ ए/38 9 345/1178314)।) –

3

कोई तरीका सोचा गया है। यह विवरण में here वर्णित:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernateTest" namespace="NHibernateTest"> 
    <class name="Person" > 
    <id name="PersonID" type="Int32"> 
     <generator class="identity" /> 
    </id> 
    <property name="LastName" type="String" length="50" /> 
    <property name="FirstName" type="String" length="50" /> 
    <many-to-one name="Photo" class="PersonPhoto" /> 
    </class> 

    <class name="PersonPhoto"> 
    <id name="PersonID" type="Int32"> 
     <generator class="foreign"> 
     <param name="property">Owner</param> 
     </generator> 
    </id> 
    <property name="Photo" type="BinaryBlob" /> 
    <one-to-one name="Owner" class="Person" constrained="true" /> 
    </class> 
</hibernate-mapping> 
+0

हाय आर्टम, क्या आप अपने प्रश्न के बारे में जानते थे "फ्लैश मीडिया सर्वर एप्लिकेशन को कॉल नहीं कर रहा है। हैंडलर कनेक्ट करें?" हटाया गया था ? (http://stackoverflow.com/questions/359727) मैं अभी भी अपने प्रतिनिधि स्तर की वजह से इसे देख सकता हूं। क्या आप चाहते हैं कि मैं अपनी पुनर्स्थापना मांगने के लिए एक यूजरवाइस प्रविष्टि लिखूं? – VonC

+0

हू। जनरल (आईएसटी) वारपैथ पर है :) चॉन वोनसी, इसे आसानी से लें। आपके उत्तर के शीर्ष पर अभी भी आपका अस्वीकरण है। यह एक उचित खेल था।आपकी ईमानदारी के लिए धन्यवाद। –

+0

यह काम नहीं करता है (यहां तक ​​कि जब डेविड येट्स के उत्तर के अनुसार कॉलम निर्दिष्ट करते हैं)। कई स्थितियों में NHibernate बहुत भ्रमित हो जाता है। – cbp

1

मैं ऊपर Artem तिखोमिरोव द्वारा प्रयोग किया जाता उदाहरण की कोशिश की। मुझे एक त्रुटि मिल रही है कि फोटो कॉलम मौजूद नहीं है। this पर देखने के बाद, मुझे पता चला कि मानचित्रण थोड़ा दूर था। जब मैं इस तरह स्तंभ नाम निर्दिष्ट करने के लिए कई-से-एक मानचित्रण बदल दिया है:

कई-से-एक नाम = "फोटो" कॉलम = "PersonID" class = "PersonPhoto" अद्वितीय = "true"

मुझे यह काम करने के लिए मिला। मुझे उम्मीद है कि इससे किसी की मदद मिलती है: o)

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