2009-05-15 14 views
13

मैं हाइबरनेट 3.2 का उपयोग कर रहा हूं, और क्वेरी बनाने के लिए मानदंडों का उपयोग कर रहा हूं। मैं कई से एक एसोसिएशन के लिए जोड़ना चाहता हूं और "ऑर्डर" करना चाहता हूं, लेकिन मुझे नहीं लगता कि यह कैसे किया जा सकता है। हाइबरनेट क्वेरी इस तरह लग रही अंत होता है, मुझे लगता है कि:एसोसिएशन द्वारा हाइबरनेट ऑर्डर

select t1.a, t1.b, t1.c, t2.dd, t2.ee 
from t1 
inner join t2 on t1.a = t2.aa 
order by t2.dd <-- need to add this 

मैं criteria.addOrder ("assnName.propertyName") की कोशिश की है, लेकिन यह काम नहीं करता। मुझे पता है कि यह सामान्य गुणों के लिए किया जा सकता है। क्या मैं कुछ भूल रहा हूँ?

उत्तर

23

ठीक है, उत्तर मिला। मैंने ऐसा कुछ करने की कोशिश की जो मुझे नहीं लगता था कि काम करेगा, लेकिन मेरे आश्चर्य के लिए। मैं इस कोशिश कर रहा था:

Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class); 

criteria.addOrder(Order.asc("assnName.propertyName")) 

लेकिन क्या वास्तव में काम किया था:

Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class); 
Criteria assnCrit = criteria.createCriteria("assnName"); 

assnCrit.addOrder(Order.asc("propertyName")); 

मैं इस धारणा है कि addOrder() विधि मुख्य मानदंड पर और किसी भी संघ मापदंड पर न केवल प्रयोग करने योग्य था बना दिया था।

14

मैं एक ही मुद्दा हो रही थी और यह भी इस तरह हल किया जा सकता:

Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class) 
    .createAlias("assnName","a") 
    .addOrder(Order.asc("a.propertyName")); 

createAlias ​​आप अपने मापदंड अपने मूल इकाई (इस मामले में WipDiscreteJob.class) पर निहित है, ताकि आप रख सकते हैं रखने की सुविधा देता यदि आपको इसकी आवश्यकता हो तो अपने मानदंडों का निर्माण करना (उदाहरण के लिए, यदि आपको मूल इकाई से संपत्ति द्वारा दूसरे आदेश की आवश्यकता है)।

+1

इसके लिए सब कुछ देख रहा था, धन्यवाद! आप '.createAlias ​​(" assnName "," assnName ") भी कर सकते हैं, जो आपको समान वाक्यविन्यास को HQL के रूप में रखने की अनुमति देता है। –

+0

@Abdullah Glad मदद करने में सक्षम होने के लिए। – Marcelo

+1

यह बहुत उपयोगी था। इसे खोजने में थोड़ी देर लग गई। – smp7d

संबंधित मुद्दे