2010-12-07 23 views
16

मेरे पास एक साधारण सवाल है। मैं अपने प्रोजेक्ट पर इस हाइबरनेट config पाया:हाइबरनेट एक्सएमएल मैपिंग: आलसी झूठी या प्राप्त करें चुनें?

<many-to-one name="employee" 
    class="com.myapp.Employee" 
    cascade="merge" 
    lazy="false" 
    fetch="select"> 
<column name="employee_id" 
    sql-type="bigint" 
    not-null="true"/> 
</many-to-one> 

को नहीं लाया जा है = "चुनें" मतलब "लेज़ी लोड सभी संग्रह और संस्थाओं" Fetching Strategies पर आधारित है। लेकिन लिखकर लिखी = "झूठी" मतलब आलसी लोड नहीं है। तो उपरोक्त कॉन्फ़िगरेशन कहता है: "आलसी लोडिंग अक्षम करें। आलसी लोडिंग सक्षम करें।" असल में, इसका मतलब है कि संपत्ति आलसी भरा हुआ है?

तो मैं के रूप में है कि config छोटा कर सकते हैं:

<many-to-one name="employee" 
    class="com.myapp.Employee" 
    cascade="merge" 
    fetch="select"> 
<column name="employee_id" 
    sql-type="bigint" 
    not-null="true"/> 
</many-to-one> 

लेकिन को नहीं लाया जा रहा है = डिफ़ॉल्ट मोड "का चयन करें"? तो असल में, मैं वही कॉन्फ़िगरेशन घोषित कर सकता हूं:

<many-to-one name="employee" 
    class="com.myapp.Employee" 
    cascade="merge"> 
<column name="employee_id" 
    sql-type="bigint" 
    not-null="true"/> 
</many-to-one> 

क्या मैं सही हूं? गलत? विचार? धन्यवाद

मैं आलसी लोड हो रहा है सक्षम करना चाहते हैं, मैं जोड़ना होगा आलसी = "true" और हटाने आलसी = "false"?

उत्तर

38

मुझे लगता है कि लाने का मोड और समय लाने की अवधारणाएं अवधारणाएं हैं जो पूरी तरह ओवरलैप नहीं होती हैं।

Lazy="true|false" नियंत्रित करता है कि कोई संगठन बेसब्री से या मांग पर लोड हो रहा है या नहीं।

fetch="select|subselect|join|batch" नियंत्रित करता है कि उस इकाई या संग्रह को लोड किया जाना आवश्यक है, जब इसे लोड किया जाना आवश्यक है।

तो, आपके सवाल का जवाब देना, fetch="select" होने का अर्थ है:

गलत ", इस"। एक दूसरे का चयन करें संबद्ध इकाई या संग्रह पुनः प्राप्त करने के आपके द्वारा स्पष्ट रूप को निर्दिष्ट आलसी = द्वारा आलसी प्राप्त कर रहा है को निष्क्रिय प्रयोग किया जाता है " दूसरा चयन केवल तभी निष्पादित किया जाएगा जब आप एसोसिएशन तक पहुंचें। " (http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html#performance-fetching)

इसका मतलब यह नहीं है कि आलसी लोडिंग अक्षम है! यह lazy="true|false" ध्वज द्वारा नियंत्रित है। lazy="true" और fetch="select" के साथ हाइबरनेट संग्रह को आलसी लोड करेगा और इसे एक चयन के साथ लोड करेगा। यदि आप lazy="false" सेट करते हैं, तो वही चयन निष्पादित किया जाएगा, अंतर यह होगा कि इसे उत्सुकता से निष्पादित किया जाएगा। उम्मीद है कि यह समझ में आता है।

रूप में अच्छी तरह यहाँ एक नज़र: http://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies

0

यदि आप इसे आलसी सेट करते हैं, तो बाहरी मानचित्र कर्मचारी को नहीं चुनता है यदि यह आवश्यक नहीं है। Fetch दिखाता है कि यह आवश्यक होने पर कर्मचारी से कैसे पूछताछ करेगा।

+0

दोनों गुण जोड़ना निरर्थक नहीं है? वे एक दूसरे को अस्वीकार नहीं करते हैं, है ना? – chris