2014-09-18 8 views
8

के साथ काम नहीं मैं अपने कई-से-एक मानचित्रण में प्रदर्शन की समस्या है। जब मैं लॉग फ़ाइल में SQL क्वेरी को डीबग करता हूं तो मुख्य क्वेरी यह ठीक है, लेकिन मेरे पास अन्य क्वेरी के बाद कई ऑब्जेक्ट मैपिंग का प्रतिनिधित्व होता है।हाइबरनेट आलसी लोड हो रहा है कई-से-एक मानचित्रण

Entity.hbm.xml:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > 

<hibernate-mapping> 
    <class name="com.omb.database.mapping.MyEntity" table="MY_ENTITY"> 
     <id name="id" type="java.lang.Integer"> 
      <column name="ENTITY_ID"/> 
      <generator class="sequence"> 
       <param name="sequence">SEQ_MY_ENTITY</param> 
      </generator> 
     </id> 

     <property name="prop1" type="string" column="PROP1" /> 
     <many-to-one name="object1" column="OBJECT1_ID" class="com.omb.database.mapping.Object1" /> 
     <many-to-one name="object2" column="OBJECT2_ID" class="com.omb.database.mapping.Object2" /> 

    </class> 
</hibernate-mapping> 

Object1.hbm.xml:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > 

<hibernate-mapping default-lazy="true"> 

    <class name="com.omb.database.mapping.Object1" table="TABLE_OBJECT_1"> 
     <id name="id" type="java.lang.Integer" column="OBJECT1_ID" /> 
     <property name="label" type="string" column="LABEL_OBJECT_1" length="15" /> 
    </class> 

</hibernate-mapping> 

Object2.hbm.xml:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > 

<hibernate-mapping default-lazy="true"> 

    <class name="com.omb.database.mapping.Object2" table="TABLE_OBJECT_2"> 
     <id name="id" type="java.lang.Integer" column="OBJECT2_ID" /> 
     <property name="label" type="string" column="LABEL_OBJECT_2" length="15" /> 
    </class> 

</hibernate-mapping> 

क्वेरी HBM:

public List<Entity> findByObject1Id(Integer object1Id) throws DataAccesException { 

     List<Entity> results = null; 
     try { 
      Query query = this.getSession().createQuery(
        "from Entity ent where ent.object1.id = :object1Id"); 
      query.setParameter("object1Id", object1Id); 
      results = query.list(); 
     } catch (HibernateException hbe) { 
      throw new DataAccesException(hbe); 
     } 

     return results; 
    } 

pom.xml में

<!-- Hibernate 3 --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate</artifactId> 
      <version>3.2.6.ga</version> 
      <exclusions> 
       <exclusion> 
        <groupId>javax.transaction</groupId> 
        <artifactId>jta</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>net.sf.ehcache</groupId> 
        <artifactId>ehcache</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>asm</groupId> 
        <artifactId>asm-attrs</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
+0

कृपया उन प्रश्नों को दिखाएं जिन्हें आप देख रहे हैं और अपना सटीक प्रश्न बताएं। क्या आप पूछ रहे हैं कि आप इन प्रश्नों को क्यों देखते हैं? क्या आप पूछ रहे हैं कि किसी भी तरह से प्रश्नों को बदलने के लिए अपना कोड/कॉन्फ़िगरेशन कैसे बदलें? – Rob

उत्तर

2

था FetchMode.SELECT, इस तरह;

<many-to-one name="object1" column="OBJECT1_ID" class="com.omb.database.mapping.Object1" fetch="select" /> 
+1

आलसी = "सत्य" और fetch = "select" के बीच क्या अंतर है? –

+1

@OusmaneMINTE इस धागे की जांच करें; http://stackoverflow.com/questions/4374528/hibernate-xml-mapping-lazy-false-or-fetch-select –

3

आपका मानचित्रण ठीक हो रहा है। यहाँ 5.1.1. Entity

दस्तावेज के रूप में <class> विशेषता आलसी डिफ़ॉल्ट सच से है

  • आलसी (वैकल्पिक): आलसी प्राप्त कर रहा है आलसी की स्थापना द्वारा निष्क्रिय किया जा सकता = "false"।

ही <many-to-one> के लिए: 5.1.7.1. Using a foreign key or an association tableआलसी विशेषता:

  • आलसी (वैकल्पिक - प्रॉक्सी के लिए चूक): डिफ़ॉल्ट रूप से, एकल बिंदु संघों प्रॉक्सी कर रहे हैं। lazy="no-proxy" निर्दिष्ट करता है कि आवृत्ति चर पहली बार पहुंचने पर संपत्ति को आलसी ढंग से लाया जाना चाहिए। इसके लिए बिल्ड-टाइम बाइटकोड उपकरण की आवश्यकता होती है। lazy="false" निर्दिष्ट करता है कि एसोसिएशन हमेशा उत्सुकता से लाया जाएगा।

तो, जहां मुद्दा है?

मैं अपने डिबग खिड़की में कहेंगे। क्योंकि आपके पास अपनी सूची का संदर्भ है, और आप परिणाम देख रहे हैं - इस समय इसे निष्पादित किया गया है - संदर्भ भी लोड किया गया है। आलसी - लेकिन लोड हो गया। वास्तव में हम क्या चाहते हैं। प्रॉक्सी - जब पहली बार tuched - लोड मजबूर कर रहा है।

इसे देखने से हटाने का प्रयास करें। या सत्र बंद और फिर घड़ी में रख ... आपको दिखाई देना चाहिए, क्वेरी, ऊपर उपयोग taht - संदर्भ लोड नहीं है ... केवल जब वास्तव में पहुँचा ... आप के साथ की कोशिश भी डिबग खिड़की के माध्यम से

+0

आपकी मदद के लिए धन्यवाद। यह मेरी गलती है ... मैं अपने MyEntity कक्षा में देखा अगर मैं विधि hashCode() या इसके बराबर() मैप की वस्तुओं का उपयोग कर नहीं था, लेकिन मैं अपने परिवर्तन सेवा है कि हाइबरनेट वस्तुओं को बदल देती है अपनी प्रस्तुति परत के लिए Pojo वस्तुओं करना भूल गया ... । और इस हिस्से में मैं myEntity.getObject1() और myEntity.getObject2() .. पद के लिए .sorry करते हैं! –

+0

अगर मेरे उत्तर ने आपकी मदद की - अच्छा। यदि आपके पास आपका जवाब है - बढ़िया! ;) शक्तिशाली हाइबरनेट का आनंद लें;) –

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