2010-03-03 11 views
6

में गणना मूल्य द्वारा ऑर्डरिंग परिणाम मेरे पास कॉलम आईडी, नाम, जीत, गेम्स_प्लेड वाला एक टेबल प्लेयर है। मैंने इसे क्लास प्लेयर में मैप किया। मैं (, मानदंड के साथ अधिमानतः संभव नहीं है, तो मानदंड के साथ HQL में भी मदद मिलेगी) हाइबरनेट में निम्न क्वेरी करने के लिएहाइबरनेट

चयन * (जीत/ games_played)

मैं प्लेयर आदेश से से चाहते हैं सूची < प्लेयर > प्राप्त करने की उम्मीद है उनके जीत अनुपात द्वारा क्रमबद्ध।

जवाब

पालो

उत्तर

9

हाइबरनेट खंड द्वारा क्रम में अंकगणित अभिव्यक्तियों का समर्थन नहीं करता है।

न तो समूह खंड द्वारा और न ही खंड द्वारा आदेश गणित भाव हो सकते हैं: हाइबरनेट प्रलेखन की धारा 14.12. The group by clause का हवाला देते हुए।

और वास्तव में, निम्नलिखित HQL क्वेरी ठीक से नहीं लौटेगा आदेश दिया परिणाम:

select p from Player p order by (p.wins/p.gamesPlayed) 

और मुझे नहीं लगता कि आप org.hibernate.criterion.Property विभाजित कर सकते हैं ताकि मानदंड एपीआई इस का समाधान नहीं होगा।

तो मैं एनोटेशन के साथ (उदाहरण के लिए एक नियम के साथ) एक गणना की विशेषता का उपयोग करने का सुझाव चाहते हैं,:

session.createCriteria(Player.class).addOrder(Order.desc("ratio")) 
+1

यह फॉर्मूला() विधि का उपयोग कर धाराप्रवाह मैपिंग के साथ .NET में भी काम करता है। – andypaxo

2

हाइबरनेट डॉक्स से के लिए धन्यवाद -

एसक्यूएल कार्य करता है और कुल कार्यों खंड द्वारा होने और क्रम में अनुमति दी जाती है अगर वे अंतर्निहित डेटाबेस द्वारा समर्थित हैं ।

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-ordering

इसका मतलब है आप अपने अंतर्निहित डेटाबेस के आधार पर यह करने के लिए की जरूरत है।

+1

धन्यवाद:

private float wins; private float gamesPlayed; @Formula(value = "WINS/GAMESPLAYED") private float ratio; 

इस मानदंड एपीआई के साथ निम्न क्वेरी की अनुमति होगी आप जवाब के लिए। क्या आपको कोई विचार है कि मानदंड के साथ ऐसा कैसे करें? – Palo

+0

-1: प्रश्न * अंकगणितीय अभिव्यक्ति * (और एसक्यूएल फ़ंक्शंस या समेकित फ़ंक्शंस नहीं) के बारे में है जो ** आदेश ** द्वारा क्रम में समर्थित नहीं हैं। –