एक ईएवी सिस्टम में, मेरे पास ऐसा मैपिंग है जो इस तरह दिखता है:NHibernate HQL: "साथ" खंड के साथ बाहरी बहिष्कार काम नहीं करता है
<class name="Record">
<map name="Values" table="RecordFieldValue">
<key column="RecordFK">
<index column="FieldFK">
<element column="Value">
</map>
</class>
मैं कुछ रिकॉर्ड्स का चयन करना चाहता हूं, जो एक विशिष्ट फ़ील्ड के लिए प्रत्येक रिकॉर्ड के मान द्वारा क्रमबद्ध है। हालांकि, ध्यान दें कि सभी रिकॉर्ड्स में वास्तव में उस फ़ील्ड का मूल्य नहीं होगा। इस मामले में, रिकॉर्ड अभी भी एक शून्य मूल्य के साथ लाया जाना चाहिए और क्रमबद्ध किया जाना चाहिए।
वांछित एसक्यूएल इस तरह दिखेगा:
select rec.*, val.Value
from Record rec
left outer join RecordFieldValue val
on val.RecordFK = rec.PK and val.FieldFK = :field
order by val.Value
बहुत खुदाई के बाद, मैंने पाया कि बाएं के "चालू" खंड को संशोधित करने का सही तरीका एचक्यूएल में शामिल है "साथ" कीवर्ड (https://nhibernate.jira.com/browse/NH-514 देखें)। तो मैंने इस एचक्यूएल की कोशिश की:
from Record rec
left join rec.Values vals with index(vals) = :field
order by vals
दुर्भाग्य से, यह निम्न त्रुटि उत्पन्न करता है: के साथ क्लॉज एक्सप्रेशन से क्लॉज तत्व से संदर्भ नहीं दिया गया था जिसके साथ क्लॉज से जुड़ा था। इसलिए मैंने इसके बजाय कोशिश की:
from Record rec
left join rec.Values vals with index(rec.Values) = :field
order by vals
लेकिन इससे एक नई त्रुटि उत्पन्न हुई: खंड के साथ केवल ड्राइविंग तालिका में कॉलम का संदर्भ दे सकता है।
इस काम को कैसे प्राप्त करें इस पर कोई विचार? धन्यवाद।
- ब्रायन
क्या यह वही बात मानदंडों के साथ की जा सकती है? –
सुंदर। मेरी इच्छा है कि इस जेपीए ने प्रतिबंध प्रश्न में शामिल छोड़ा था बेहतर जाना जाता था! मैं समय का एक गुच्छा बर्बाद कर दिया। –