2012-11-08 22 views
7

मैं एक परियोजना में काम कर रहा हूं जो जेपीए ओआरएम का उपयोग करता है और ढांचा प्रश्न बनाने के लिए दो प्रकार की विधि प्रदान करता है।हमें मूल क्वेरी बनाने की आवश्यकता क्यों है?

  • entityManager.createQuery (query1);
  • entityManager.createNativeQuery (query2);

मैं समझता हूं कि क्वेरी स्ट्रिंग के प्रकार का उपयोग करने के लिए उन्हें पारित किया जाना है, लेकिन मुझे नहीं पता कि हमें मूल क्वेरी बनाने की आवश्यकता क्यों है? शायद हम वहां ओआरएम क्षमताओं का उपयोग नहीं करना चाहते हैं?

उत्तर

11

जब तक आप चाहें तो मूल क्वेरी बनाने की आवश्यकता नहीं है। अंततः जेपीक्यूएल को ढांचे द्वारा एसक्यूएल में अनुवादित किया जाता है लेकिन ढांचा आपको देशी क्वेरी को भी कॉल करने देता है। ऐसा क्यों करना चाहते हैं:

  • निम्न स्तर का उपयोग, जिसका अर्थ है कि आप स्वयं को मैपिंग अनुकूलित और संभाल सकते हैं; एसक्यूएल के साथ आप वास्तव में डेटाबेस तालिका तक पहुंचते हैं जबकि जेपीक्यूएल के साथ आप इकाई ऑब्जेक्ट्स तक पहुंचते हैं;
  • शायद तुम JPQL जानने के लिए अगर आप पहले से एसक्यूएल पता नहीं करना चाहती
  • आप पहले से ही प्रश्नों एसक्यूएल में लिखा है, और संसाधनों/समय बंदरगाह के लिए उन्हें JPQL को
9

createQuery जेपीए की अपनी क्वेरी भाषा का उपयोग करता है, तो आप टेबल नामों के बजाय कक्षा नामों में से चुनते हैं। यह एसक्यूएल नहीं है, यह समान है, और बाद में इसे वास्तविक एसक्यूएल में बदल दिया गया है। जावा कक्षाओं के लिए मानचित्रण स्वचालित रूप से किया जाएगा और परिणामस्वरूप वास्तविक वर्ग के उदाहरण वापस कर दिए जाएंगे।

createNativeQuery वास्तविक SQL का उपयोग करता है, और जेपीए सुविधाओं का उपयोग करने में सक्षम नहीं होगा। यह विधि सामान्य रूप से उपयोग की जाती है यदि आपको कुछ ऐसा करने की ज़रूरत है जो जेपीए द्वारा समर्थित नहीं है। ऑब्जेक्ट [] की एक सूची वापस कर दी जाएगी, और जावा ऑब्जेक्ट्स पर मैपिंग मैन्युअल रूप से की जानी होगी। दूसरे शब्दों में, जेपीए आने से पहले डीबी के साथ काम करने की तरह ही, कनेक्शन हैंडलिंग स्वचालित रूप से स्वचालित होने के बाद थोड़ा और सुविधाजनक है।

4

मैं इसे इस्तेमाल किया है की जरूरत नहीं है अनुकूलन उद्देश्यों के लिए। मूल प्रश्नों का उपयोग करना मतलब है कि ओआरएम मानचित्रण जगह में नहीं है, और जेपीक्यूएल के बजाय, आप डीबी के मूल वाक्यविन्यास का उपयोग करते हैं। इसलिए, जैसा कि @RasmusFranke ने भी बताया, अगर आपको जेपीए द्वारा समर्थित कुछ ऐसा नहीं चाहिए (जैसे कि जब आप डीबी विक्रेता विशिष्ट एक्सटेंशन का उपयोग करना चाहते हैं, जो अवधारणात्मक रूप से एक बुरा विचार है, क्योंकि जेपीए डीबी अज्ञेयवादी होने के बारे में है, लेकिन फिर भी होता है मुझे पता है ...)

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