2010-11-23 16 views
7

मेरे पास कई NamedQuery परिभाषित हैं, और मैं प्रत्येक फ़ील्ड के लिए अद्वितीय NamedQuery बनाने के बिना गतिशील रूप से किसी इकाई के लिए फ़ील्ड को सॉर्ट करने में सक्षम होना चाहता हूं। उदाहरण के लिए:गतिशील रूप से एक NamedQuery सॉर्टिंग? सीम/हाइबरनेट/जेपीए

मेरे पास फ़ील्ड 'ए', 'बी', और 'सी' के साथ मायऑब्जेक्ट नामक एक इकाई है। मेरी मूल क्वेरी "SELECT DISTINCT o FROM MyObject o" है, लेकिन मैं अपनी क्वेरी में ORDER BY खंड जोड़ने में सक्षम होना चाहता हूं। आदर्श रूप में, मैं नाम वाले पैरामीटर है, जहां मेरी क्वेरी कैसा दिखेगा की तरह कुछ करने के लिए सक्षम होगा:

SELECT DISTINCT o FROM MyObject o ORDER BY :order 

मैं तो क्षेत्र में निर्दिष्ट करना होगा (क, ख, ग) है कि मैं पर क्रमबद्ध करना चाहते हैं। सीम/हाइबरनेट/जेपीए का उपयोग करके इसे पूरा करने का कोई तरीका है? क्या इससे निपटने के लिए कोई बेहतर रणनीति है?

+1

यह प्रश्न [पैरामीटर द्वारा हाइबरनेट नामित क्वेरी ऑर्डर] से संबंधित है (http://stackoverflow.com/questions/4120388/hibernate-named-query-order-by-partameter)। शायद इसी जवाब में आपकी मदद करें। – kraftan

उत्तर

5

नामांकित प्रश्न रन-टाइम पर बदला नहीं जा सकता है।

// ----- संपादित-भाग

public void getOrders(String orderByElement){ 

    String query = "SELECT DISTINCT o FROM MyObject o ORDER BY " + orderByElement; 

    entityManager.createQuery(query).getResultList(); 
} 

इसके जेपीए विशिष्ट।

+0

यह वही है जो मैं ढूंढ रहा था। लेकिन, क्या आपके द्वारा प्रदान की गई क्वेरी काम करेगा यदि मैंने इसे जेपीए @NamedQuery के रूप में निर्दिष्ट किया है? या यह केवल तब काम करेगा जब entityManager.createQuery के साथ बनाया गया हो? मैं किसी भी कारण से नहीं सोच सकता कि ऐसा क्यों नहीं होगा, लेकिन बस यह सुनिश्चित करना चाहते हैं। – Shadowman

+0

मुझे नहीं लगता कि यह समाधान काम करता है। [जेपीक्यूएल भाषा संदर्भ] के अनुसार (http://download.oracle.com/docs/cd/E11035_01/kodo41/full/html/ejb3_langref.html#ejb3_langref_input_params) इनपुट पैरामीटर केवल 'कहां' और 'हैविंग' में ही अनुमति है खंड। क्या आपने उस प्रश्न की कोशिश की है? – kraftan

+0

तदनुसार मेरा जवाब संपादित किया। –

3

देखें hibernate-named-query-order-by-partameter

बुनियादी विचार में मेरे समाधान खंड द्वारा 'के आदेश के बिना क्वेरी की दुकान और रन-टाइम में उस पर संपादित करने के लिए है।

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