मैं अपने DAO में इकाई प्रबंधक का उपयोग कर रहा हूं।

तालिका बनाने के लिए, मैं उपयोग कर रहा हूँ:

String CREATE_TABLE = "CREATE TABLE if not exists cats (name varchar(255) PRIMARY KEY NOT NULL, age int NOT NULL);

तालिका को हटाने के लिए मैं उपयोग कर रहा हूं:

String DELETE_TABLE = "DROP TABLE examples";

मैं इसका उपयोग निष्पादित करने के लिए कर रहा हूं:

entityManager.createNativeQuery(sql).executeQuery();

मैं वही JPQL का उपयोग करके कैसे कर सकता हूं (मेरे पास एक @Entity है। em> इसके लिए यदि आवश्यक हो)?

मुझे कौन सी विधि पसंद करनी चाहिए - createNativeQuery() +SQL या createQuery()< /em> +JPQL?

0
Donatello 24 फरवरी 2019, 05:42

1 उत्तर

सबसे बढ़िया उत्तर

जैसा कि jpql विनिर्देश कहता है, आप तालिका नहीं बना सकते। जब पूछताछ की बात आती है, तो यह निर्भर करता है।

जेपीक्यूएल लाभ:

  1. जेपीक्यूएल मैपिंग (आलसी/उत्सुक लोडिंग, रिलेटिनशिप) का लाभ उठाता है - यह आपके द्वारा पहले से परिभाषित किए गए कार्यों का उपयोग करता है। SQL में आपको किसी तरह परिणाम को मैप करना होगा।
  2. बेहतर प्रदर्शन प्रदान करने के लिए क्वेरी को कैश में संग्रहीत किया जा सकता है।
  3. दृढ़ता संदर्भ को क्वेरी से पहले फ़्लश करने की आवश्यकता नहीं है।
  4. आप क्वेरी के साथ इकाई का नाम बदलने के लिए IDE का उपयोग कर सकते हैं। उन्हें बनाए रखना ज्यादा आसान है।
  5. डीबीएमएस अज्ञेयवादी - आप किसी भी समय डेटाबेस बदल सकते हैं, यह काम करेगा (यह एक नुकसान भी हो सकता है - वाक्यविन्यास एसक्यूएल मानकों द्वारा सीमित है)।

एसक्यूएल लाभ:

  1. आप विक्रेता विशिष्ट बोली का उपयोग कर सकते हैं, यह jpql सत्यापन की कमियों को दूर करता है।
  2. DML संचालन समर्थित हैं, जैसे क्रॉप करना या तालिका बनाना। सूचकांक और विभाजन भी।
  3. आपके पास डीबी के प्रश्नों का अधिक नियंत्रण है।

संक्षेप में: जब तक आपको विक्रेता विशिष्ट प्रश्नों की आवश्यकता नहीं होती है जो संभवतः कार्यान्वयन को आसान बनाते हैं और/या प्रदर्शन में सुधार करते हैं, तो jpql विकल्प होना चाहिए। स्कीमा मॉडलिंग रनटाइम पर नहीं की जानी चाहिए।

2
Andronicus 24 फरवरी 2019, 07:14