2012-11-16 31 views
8

का उपयोग कर रहा भीतरी एक स्तंभ पर दो तालिकाओं में शामिल होने की कोशिश कर रहा हूँ में शामिल हो। डीबी ओर से, वहाँ कोई मानचित्रण के रूप में यह कुछ मैं के बारे में बात नहीं करना चाहता है।इनर HQL

मैं आंतरिक शामिल हों और भूमिका वस्तुओं/परिणाम प्राप्त का उपयोग कर HQL क्वेरी निष्पादित करने के लिए चाहते हैं।

यहाँ मेरी HQL अब तक

session.createQuery ("भूमिका से भूमिका अंदरूनी भागीदारी के रूप में भागीदारी शामिल हों के रूप में पर role.id = involvement.roleid कहां involvement.id = एक्स")। सूची है ();

मैं पर देख HQL पर उपलब्ध नहीं है। मैं केवल इस कॉलम पर जुड़ने के लिए हाइबरनेट को स्पष्ट रूप से कैसे बताऊं।

मैं एक नीचे की कोशिश की भी

भूमिका के रूप में भूमिका, भागीदारी के रूप में भागीदारी से roleSpec का चयन करें जहां role.ID = involvement.role_id और involvement.id = 27251352

लेकिन मुझे आरओएलई अपवाद में मैप नहीं किया जा रहा है।

+0

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

+0

क्या आप मुझे बता सकते हैं कि कैसे मैं हाइबरनेट का उपयोग एसक्यूएल निष्पादित करने के लिए करते हैं। शेष एप्लिकेशन व्यापक रूप से हाइबरनेट का उपयोग करता है। – Reddy

+0

हाइबरनेट के संदर्भ में मूल क्वेरी के लिए खोजें –

उत्तर

14

कृपया जांचें कि आपका भूमिका वास्तव में एक मैप की इकाई है। इसके अलावा, आप "ऑन" प्रदर्शन करने के लिए की जरूरत नहीं है - हाइबरनेट जानता है क्या में शामिल होने के स्तंभ (मुझे पता है कि जेपीए में इस परिभाषित करने के लिए) है - तो कोई बयान में यह प्रदान करने की आवश्यकता। यह होना चाहिए -

session.createQuery("from Role as role INNER JOIN Involvement as involvement WHERE involvement.id = X").list(); 

मुझे लगता है आप भूमिका वर्ग भूमिका तालिका को मैप किया है, और भागीदारी वर्ग तालिका involement को मैप किया।
हो सकता है कि आप गलती से मेज के नाम का उपयोग किया और इसी कारण आप "मैप नहीं" त्रुटि मिलती है।
पिछली बार मैंने HQL (और नहीं जेपीए-QL) ने लिखा है मैं निम्नलिखित link संदर्भ के रूप में इस्तेमाल किया, यह सब जानकारी की जरूरत है प्रदान करता है।