2012-01-18 9 views
10

मेरे पास विरासत के कई स्तरों के साथ एक जटिल श्रेणी पदानुक्रम है, और मुझे एचक्यूएल का उपयोग करके उस पदानुक्रम के भीतर कुछ विशिष्ट प्रकारों के लिए पूछताछ करने की आवश्यकता है।एकाधिक प्रकार/कक्षाओं के लिए एचक्यूएल क्वेरी

मान लें कि मेरे पास एक सामान्य बेस-क्लास एनिमल के साथ कक्षाएं बिल्ली, कुत्ते और बंदर हैं।

मैं एक प्रश्न कैसे लिखूं जो केवल उनमें से कुछ का चयन करता है, मान लीजिए, बिल्ली और कुत्ता?

मुझे कुछ पशु गुणों को सॉर्ट या फ़िल्टर करने की भी आवश्यकता है - तो मान लें कि सेक्स के साथ जानवर = "पुरुष" और नाम से आदेश।

क्या यह संभव है?

उत्तर

11

मानक जेपीक्यूएल फ़ंक्शन TYPE() है, जो कि documentation में उल्लिखित हैब्रानेट में भी समर्थित है।

कृपया, एक उदाहरण का पालन करें:

select a from Animal a 
where type(a) in ('Cat', 'Dog') 
    and a.sex = 'Male' 
order by a.name 

हाइबरनेट भी .class अंतर्निहित संपत्ति का उपयोग करता है: [एनएच knol] के अनुसार

select a from Animal a 
where a.class in ('Cat', 'Dog') 
    and a.sex = 'Male' 
order by a.name 
+0

(http://knol.google.com/k फैबियो मौलो द्वारा/nhibernate-Chapter-12-hql-the-hibernate-query-language), "विशेष संपत्ति वर्ग पॉलिमॉर्फिक दृढ़ता के मामले में एक उदाहरण के भेदभाव मूल्य का उपयोग करता है। जहां जावा क्लास नाम एम्बेडेड होता है, जहां खंड होगा इसके भेदभाव मूल्य में अनुवाद किया जाना चाहिए। " - ऐसा लगता है कि यह समर्थित है। मैं कल सुबह कोशिश करूँगा और परिणाम यहां पोस्ट करूंगा, धन्यवाद! –

+0

जादुई। क्लास संपत्ति एनएच में एचक्यूएल के साथ बढ़िया काम करती है! एक चेतावनी के रूप में, मानदंड एपीआई काफी उपयोगी नहीं है - इसे मैपिंग से भेदभावकर्ता को मैन्युअल रूप से पुनर्प्राप्त करने के लिए एक भयानक काम की आवश्यकता होती है, क्योंकि मानदंड एपीआई कक्षा-नामों को भेदभाव करने वाले मूल्यों में अनुवाद नहीं करता है, लेकिन उम्मीद है कि आप भेदभावकर्ता को जान लेंगे अग्रिम मूल्य। भयानक सामान लेकिन एचक्यूएल के साथ यह बहुत अच्छा काम करता है! –