के साथ TOAD का उपयोग करता हूं तो मुझे ओरेकल पर हाइबरनेट और मूल क्वेरी के साथ एक प्रदर्शन समस्या का पता चला है। जब मैं TOAD पर कई पैरामीटर के साथ एक जटिल SQL क्वेरी निष्पादित करता हूं तो मुझे परिणाम मिलीसेकंड में मिलता है। हालांकि, जब मैं हाइबरनेट का उपयोग करके एक ही क्वेरी निष्पादित करता हूं तो इस बार बड़े पैमाने पर वृद्धि हुई है (चार सेकंड तक या इससे भी अधिक)।हाइबरनेट + जावा पर धीमी प्रदर्शन, लेकिन जब मैं उसी मूल ओरेकल क्वेरी
मेरी एसक्यूएल क्वेरी अपेक्षाकृत जटिल है, एक अद्वितीय मूल्य लौटाएं (इसलिए, समस्या इंस्टॉलेशन कक्षाओं के लिए आवश्यक समय से संबंधित नहीं है) और इसमें 'नाम पैरामीटर' प्रारूप के साथ कई पैरामीटर शामिल हैं। यह क्वेरी स्ट्रिंग में संग्रहीत है। उदाहरण के लिए,
String myNamedNativeQuery = "select count(*) from tables "+
"where column1 = :nameParameter1 "+
"and column2 = :nameParameter2";
//actually my sentence is much more complex!!
जब मैं TOAD पर वाक्य निष्पादित करता हूं तो इसे कुछ मिलीसेकंड में हल किया जाता है। लेकिन इस वाक्य का उपयोग हाइबरनेट
SQLQuery query = session.createSQLQuery("myNamedNativeQuery");
query.setParameter(nameParameter1, value1);
query.setParameter(nameParameter2, value2);
query.uniqueResult();
समान परिणाम प्राप्त करने के लिए कई सेकंड आवश्यक हैं।
मुझे एहसास हुआ कि मैंने सीधे मूल क्वेरी पर पैरामीटर को प्रतिस्थापित किया है और फिर मैं हाइबरनेट का उपयोग करके वाक्य को निष्पादित करता हूं, समय बहुत कम हो जाता है। यह ऐसा कुछ होगा:
String strQuery = session.getNamedQuery("myNamedNativeQuery").getQueryString();
myNamedNativeQuery = myNamedNativeQuery.replace("nameParameter1", value1);
myNamedNativeQuery = myNamedNativeQuery.replace("nameParameter2", value2);
SQLQuery query = session.createSQLQuery("myNamedNativeQuery");
query.uniqueResult();
कोई जानता है कि क्या हो रहा है ??
अग्रिम धन्यवाद।
पुनश्च: Oracle संस्करण 9i और हाइबरनेट है 3.2
हाइबरनेट के साथ "शो एसक्यूएल" विकल्प की बारी देखें। यह आपको यह प्रश्न दिखाएगा कि हाइबरनेट चल रहा है और आपको अंतर्दृष्टि देगा कि यह इतना समय क्यों ले रहा है। –