2011-06-19 12 views
7

स्थिति के लिए अवैध रूप से प्रयास इस तरह है:HQL: भिन्नता संग्रह

मैं एक इकाई बुक कि अध्याय के साथ एक-से-अनेक संबंध रखती है।

अब अगर मैं क्वेरी का प्रयास करता हूं, तो "from Book book inner join book.chapters chapter where chapter.title like '%hibernate%'", यह मुझे वांछित परिणाम देता है।

लेकिन अगर मैं कोशिश करता हूं, "from Book where book.chapters.title like '%hibernate%'", मुझे त्रुटि त्रुटि का अवैध प्रयास मिलता है।

बात यह है कि मैं केवल बुक ऑब्जेक्ट्स का संग्रह बदले में चाहता हूं और बदले में बुक और चैप्टर ऑब्जेक्ट्स की जोड़ी को संग्रह में नहीं भेजता जो मुझे पूर्व क्वेरी के साथ मिलता है।

क्या कोई मुझे समझने में मदद कर सकता है?

उत्तर

12

अध्याय पुस्तकें में संग्रह है और इसलिए संपत्ति शीर्षक (संग्रह.title) नहीं होगा। आपको अपने पहले उदाहरण की तरह अपनी क्वेरी में शामिल करने के लिए अध्यायों में शामिल होने की आवश्यकता है। यदि आपके अध्यायों को आलसी तरीके से मैप किया गया है तो आपको केवल उन पुस्तकों के संग्रह के बिना पुस्तक का संग्रह प्राप्त होगा। तो मैं कहूंगा, अपनी पहली क्वेरी का प्रयोग करें।

आगे पढ़ने के लिए, query HQL joins और performance fetching पृष्ठों पर एक नज़र डालें।

+1

यहां तक ​​कि अगर अध्याय इकाई lazily मैप किया गया था, यह क्यों पुस्तकों का केवल संग्रह मेरी पूर्व क्वेरी के साथ मिलेंगे? मुझे लगता है कि पुस्तक पुस्तक से आंतरिक पुस्तक में शामिल पुस्तक बुक करें। अध्याय अध्याय जहां अध्याय.title '% hibernate%' जैसा था, वही था जो मैंने पहले स्थान पर किया था। उत्तर के लिए बहुत धन्यवाद :) – skip

+0

मैंने अपने उत्तर में दो लिंक जोड़े जो रणनीतियों की रूपरेखा तैयार करते हैं। – joostschouten

+0

लिंक के लिए धन्यवाद, लेकिन जब मैं fetching रणनीति के लिए LAZY का उपयोग कर रहा था तब भी मुझे परिणाम में पुस्तक और अध्याय जोड़े मिल रहे थे। हालांकि मुझे डुप्लिकेट बुक ऑब्जेक्ट मिल रहा था। यद्यपि लिंक के लिए धन्यवाद :) – skip

2

आप इसे सबक्वायरी के साथ कर सकते हैं।

from Book book where not exists (from chapter where 
        chapter.title like '%hibernate%' and chapter.book = book) 

तरह (परीक्षण किया नहीं ...)

+1

हाँ, यह शायद ठीक है। किसी कारण से मैंने सोचा था कि आपके पास ऐसा कुछ था जो आपको इच्छित डेटा से अधिक डेटा दे रहा था। –

+1

'बुक बुक आंतरिक पुस्तक में शामिल पुस्तक बुक करें। अध्याय अध्याय जहां अध्याय.title'% hibernate% 'की तरह है, सिर्फ मेरे लिए ठीक काम कर रहा है। उत्तर के लिए बहुत धन्यवाद :) – skip

+0

मेरी आखिरी टिप्पणी में टाइपो के लिए खेद है, यह शीर्षक और हाइबरनेट होना चाहिए था। हां, मुझे बस डुप्लिकेट ऑब्जेक्ट्स को निकालने की आवश्यकता है और मैं क्वेरी से पुनर्प्राप्त पुस्तकों के संग्रह पर LinkedHashSet जैसे कुछ का उपयोग करना चाहता था। धन्यवाद :) – skip

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