2012-03-15 13 views
9

मैं कुछ रिकॉर्ड प्राप्त करने के लिए एक एचक्यूएल क्वेरी का उपयोग कर रहा हूं। यदि मैं बाएं जॉइन फ़ेच का उपयोग करता हूं तो एक संग्रह जो मेरी लक्षित इकाई में है, में डुप्लिकेट रिकॉर्ड होंगे। अगर मैं केवल बाएं जुड़ने का उपयोग करता हूं, तो यह नहीं होगा। मुझे लगता है कि जब हाइबरनेट आलसी रिकॉर्ड रिकॉर्ड करता है, तो यह डुप्लीकेट से बचाता है।बाएं जुड़ने का उपयोग करके डुप्लीकेट

"SELECT z FROM ", TableA.TABLE_NAME, " z ", // 
      "LEFT JOIN FETCH z.attributeX pv ", // 
      "LEFT JOIN FETCH pv.attributeY anteil ", // 
      "LEFT JOIN FETCH z.attributeB kma ", // 
      "LEFT JOIN FETCH kma.attributeC ", // 
      "WHERE anteil.attributeD.attributeE.id = :eId ", // 
      "AND pv.attributeG.id = :gId "); 

मेरे इकाई TableA TablePV करने के लिए एक लिंक (बायाँ शामिल हों z.attributeX पीवी फ़ेच)

TablePV ("वाम pv.attributeY anteil FETCH शामिल हों) TableY का संग्रह है

अब है Hibernate TablePV के बच्चों को छोड़कर सबकुछ सही तरीके से मैप करेगा। इसमें कई बार एक ही रिकॉर्ड होगा। टेबलए पर एक विच्छेद मदद नहीं करता है, क्योंकि वहाँ कोई डुप्लिकेट नहीं है। मैं उन रिकॉर्ड्स को मैन्युअल रूप से हटा सकता हूं जो मुझे लगता है कि काफी असरदार होगा

+0

जैसे कुछ अपने संग्रह के रूप में सेट का उपयोग करें। –

+0

AFAIK बाएं जॉइन फ़ेच और उस पर एक प्रतिबंध आपसी अनन्य है क्योंकि प्रतिबंध संग्रह के तत्वों को उत्सुकता से फ़िल्टर करने के लिए फ़िल्टर कर सकता है। हो सकता है कि आपके पास – Firo

+0

आपके उत्तर के लिए धन्यवाद। एक सेट समस्या को हल करेगा लेकिन एक कार्य-आसपास है और अन्य समस्याएं पैदा करेगा (उदाहरण के लिए आदेश)। मुझे नहीं पता कि यह पारस्परिक रूप से अनन्य है, क्योंकि मामला समझ में आता है। मैं चाहता हूं कि रिकॉर्ड्स एक ही प्रश्न में लाए जाएं, न कि किसी अन्य चयन कथन के साथ। ऐसा होगा अगर मैं केवल बिना फीच के बाएं जॉइन का इस्तेमाल करता। – Daniel

उत्तर

-1

अपनी क्वेरी में DISTINCT का उपयोग करने का प्रयास करें, SELECT DISTINCT z FROM Entity z...

+3

जैसा कि मेरे प्रश्न में बताया गया है, यह चाल नहीं करता है। समस्या यह है कि संग्रह में डुप्लीकेट होते हैं, न कि मुख्य इकाई स्वयं। – Daniel

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