HQL ERROR: जुड़ने के लिए पथ अपेक्षित है


100

मैं इस क्वेरी के बदलाव की कोशिश कर रहा हूं और ऐसा करने के लिए प्रतीत नहीं कर सकता। मैंने इस पोस्ट को भी संदर्भित किया है: Join के लिए Path Expected! Nhibernate त्रुटि और मेरी क्वेरी पर समान तर्क लागू नहीं कर सकती। मेरी Userवस्तु का UserGroupसंग्रह है।

मैं समझता हूं कि क्वेरी को ऑब्जेक्ट के भीतर संस्थाओं को संदर्भित करने की आवश्यकता है, लेकिन जो मैं देख रहा हूं उससे मैं ...

@NamedQuery(
  name = "User.findByGroupId",
  query =
    "SELECT u FROM UserGroup ug " +
    "INNER JOIN User u WHERE ug.group_id = :groupId ORDER BY u.lastname"
)

जवाबों:


131
select u from UserGroup ug inner join ug.user u 
where ug.group_id = :groupId 
order by u.lastname

एक नामित क्वेरी के रूप में:

@NamedQuery(
  name = "User.findByGroupId",
  query =
    "SELECT u FROM UserGroup ug " +
    "INNER JOIN ug.user u WHERE ug.group_id = :groupId ORDER BY u.lastname"
)

HQL स्टेटमेंट में पथों का उपयोग करें, एक इकाई से दूसरे में। HQL पर हाइबरनेट प्रलेखन देखें और विवरण के लिए जुड़ जाता है।


32
एक "पथ" क्या है? मैंने HQL डॉक्यूमेंटेशन को खोजा लेकिन उसकी कोई परिभाषा नहीं मिली।
gwg

7
इसका मतलब है कि आपको संस्थाओं को जोड़ने की आवश्यकता है: ऊपर दिए गए उनके उदाहरण में, ध्यान दें कि वह किस तरह से ug.user u डालता है। इससे पहले कि आप इसे प्राप्त कर सकते हैं बिना किसी त्रुटि के भी। इसके अलावा, 'ug.user u' में 'user' को क्लास UserGroup में फ़ील्ड का नाम होना चाहिए!
लॉरेंस

6
यह HQL सिंटैक्स कष्टप्रद है। मुझे बहुत सारे उदाहरण खोजने थे और आपका पाया।
ऋक्मेरु

तब मैं एंटिटी के साथ घोषित किए गए स्पष्ट मानचित्रण (शामिल होने के लिए उपयोग किए जाने वाले क्षेत्र) के बिना संस्थाओं को "मैन्युअल रूप से" शामिल नहीं कर सकता हूं?
मिस्टर एंडरसन

67

आपको उस संस्था का नाम देना होगा जो उपयोगकर्ता के लिए एसोसिएशन रखती है। उदाहरण के लिए,

... INNER JOIN ug.user u ...

वह "पथ" है जो त्रुटि संदेश के बारे में शिकायत कर रहा है - उपयोगकर्ता समूह से उपयोगकर्ता इकाई के लिए पथ।

हाइबरनेट घोषणात्मक JOINs पर निर्भर करता है, जिसके लिए मानचित्रण मेटाडेटा में शामिल होने की स्थिति घोषित की जाती है। यही कारण है कि पथ के बिना देशी SQL क्वेरी का निर्माण करना असंभव है।


13
अंत में किसी ने इस मुद्दे की जड़ का जवाब दिया ... (मौजूदा उपनाम के साथ विदेशी तालिका को उपसर्ग करने की आवश्यकता) ने मेरी समस्या हल कर दी, बहुत बहुत धन्यवाद!
साद बेनबज़िद

6
क्या होगा: यदि आपने इकाई में संघ नहीं बनाया और सिर्फ 'लॉन्ग यूजरआईड;'
Spektakulatius
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.