2012-05-12 13 views
13

मैं ग्रहण में हाइबरनेट पर काम कर रहा हूं। मैं सरल 'से' क्वेरी निष्पादित कर रहा हूं। यहां कोडहाइबरनेट क्वेरी एक ही रिकॉर्ड को कई बार देता है

List list = sess1.createQuery("From Myview").list(); 
    System.out.println("Records Found :"+list.size()); 

    Iterator<Myview> i = list.iterator(); 

    while(i.hasNext()) 
    { 
     Myview nS = i.next(); 
     System.out.println(nS.getFirstName()+" -- "+nS.getLastName()+" -- "+nS.getAddressLine1()); 
    } 

समस्या list.size() रिटर्न 11 है, जो ठीक है क्योंकि मेरे पास मेरी तालिका में 11 रिकॉर्ड हैं। लेकिन जब मैं लूप के दौरान हूं, वही रिकॉर्ड 11 वें पुनरावृत्ति के बाद कई बार दिखाए जाते हैं और लूप टर्मिंट होते हैं। यहाँ मेरी उत्पादन

enter image description here

यहाँ

है मैं क्या चाहते

enter image description here

अब आप देख सकते हैं कि मेरी उत्पादन में, रिकॉर्ड 11 बार प्रदर्शित किया जाता है, लेकिन एक ही रिकॉर्ड को बार-बार दोहराया जाता है । और मुझे जो चाहिए वह बाद की छवि में प्रदर्शित आउटपुट है।

कृपया, इस संबंध में मेरी मदद के रूप में मैं हाइबरनेट को

उत्तर

18

ऐसा तब होता है जब आपकी एचबीएम फ़ाइल में आईडी तत्व आपकी डीबी तालिका में पीके नहीं होता है। हाइबरनेट उसी पंक्ति के साथ एक ही वस्तु के साथ सभी पंक्तियों का इलाज करता है।

या तो अपने आईडी तत्व को पीके कॉलम पर इंगित करने के लिए बदलें या यदि आपके तालिका में केवल एक समग्र प्राथमिक कुंजी है तो समग्र-आईडी तत्व का उपयोग करें।

0

आप सुनिश्चित करें कि तालिका सही ढंग से भर जाता है कर रहे हैं नया हूँ? कोशिश:

List list = sess1.createQuery("SELECT * FROM Myview").list(); 

इसके अलावा, आप एक दृश्य से इस सूची को मिल रहा है? क्या आप वाकई इस दृश्य को सही तरीके से बना चुके हैं?

+3

यह एसक्यूएल है, एचक्यूएल नहीं। –

0

आपको एक ही परिणाम फ़िल्टर करने के लिए विशिष्ट कीवर्ड का उपयोग करना चाहिए।

1
आपका इकाई MyView

java.io.Serializable इंटरफ़ेस को लागू करने

0

आप मानचित्रण में संघ है तो अगर fetch=FetchType.EAGER जाँच की है। यदि हां तो अन्य fetch प्रकार या fetchMode का उपयोग करें।

0

हाइबरनेट द्वारा लिंक्ड हैशसेट पर लौटे ऑब्जेक्ट्स को रखें और LinkedHashSet को वापस करें।

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