java - जेपीए और हाइबरनेट के बीच क्या अंतर है?




hibernate jpa (16)

मैं समझता हूं कि जेपीए 2 एक विनिर्देश है और हाइबरनेट ओआरएम के लिए एक उपकरण है। साथ ही, मैं समझता हूं कि हाइबरनेट में जेपीए 2 की तुलना में अधिक सुविधाएं हैं। लेकिन व्यावहारिक दृष्टिकोण से, वास्तव में क्या अंतर है?

मुझे iBatis का उपयोग करने का अनुभव है और अब मैं या तो हाइबरनेट या जेपीए 2 सीखने की कोशिश कर रहा हूं। मैंने प्रो जेपीए 2 पुस्तक उठाई और यह "जेपीए प्रदाता" का जिक्र करता रहता है। उदाहरण के लिए:

यदि आपको लगता है कि एक सुविधा मानकीकृत की जानी चाहिए, तो आपको बात करनी चाहिए और अपने जेपीए प्रदाता से अनुरोध करना चाहिए

यह मुझे भ्रमित करता है इसलिए मेरे पास कुछ प्रश्न हैं:

  • अकेले जेपीए 2 का उपयोग करके मैं अपने पीओजेओ को एनोटेट करके डीबी से डेटा ला सकता हूं
  • क्या जेपीए 2 को "जेपीए प्रदाता" जैसे टॉपलिंक या हाइबरनेट के साथ इस्तेमाल किया जाना चाहिए? यदि हां, तो जेपीए 2 + हाइबरनेट का उपयोग अकेले जेपीए 2 की तुलना में, या अकेले हाइबरनेट की तुलना में करने का क्या फायदा है?
  • क्या आप एक अच्छी व्यावहारिक जेपीए 2 पुस्तक की सिफारिश कर सकते हैं। "प्रो जेपीए 2" जेपीए 2 पर एक बाइबल और संदर्भ की तरह दिखता है (यह किताब के बाद के आधे तक प्रश्नों में नहीं आता है)। क्या ऐसी कोई पुस्तक है जो जेपीए 2 में समस्या / समाधान दृष्टिकोण लेती है?

मैं बहुत आसान शब्दों में व्याख्या करने की कोशिश करता हूं।

मान लीजिए कि आपको एक कार की जरूरत है क्योंकि हम सभी जानते हैं कि उनके कई ए क्लास निर्माता हैं जैसे मेरिकेस, बीएमडब्ल्यू, ऑडियो आदि।

अब उपरोक्त कथन में कार (एक विनिर्देशन है) क्योंकि प्रत्येक कार में 4 पहियों वाली चीज़ जैसी सामान्य विशेषताएं होती हैं और सड़क पर संचालित किया जा सकता है कार है ... तो यह जेपीए की तरह है। और मर्केडिस, बीएमडब्लू, ऑडियो आदि सिर्फ सामान्य कार सुविधा का उपयोग कर रहे हैं और अपने ग्राहक आधार के अनुसार कार्यक्षमता जोड़ रहे हैं ताकि वे कार विनिर्देश जैसे हाइबरनेट, आईबीएटीआईएस इत्यादि को कार्यान्वित कर रहे हों।

इसलिए इस आम विशेषताओं से जेपीए और हाइबरनेट जाना उनके जब्स की आवश्यकता के अनुसार एक कार्यान्वयन है।

1 और बात

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

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

धन्यवाद


जबकि जेपीए विनिर्देश है, हाइबरनेट कार्यान्वयन प्रदाता है जो विनिर्देशन में निर्धारित नियमों का पालन करता है।


जेपीए इंटरफ़ेस है, हाइबरनेट उस इंटरफेस का एक कार्यान्वयन है।


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

तो आपके विकल्प यह हैं: हाइबरनेट, टप्लिंक, आदि ...

जेपीए का लाभ यह है कि यदि आपको आवश्यकता हो तो यह आपके कार्यान्वयन को स्वैप करने की अनुमति देता है। नुकसान यह है कि देशी हाइबरनेट / टॉप्लिंक / आदि ... एपीआई कार्यक्षमता प्रदान कर सकता है कि जेपीए विनिर्देश समर्थन नहीं करता है।


जेपीए एक विनिर्देश है जिसे आप डीबी ऑपरेशंस, या मैपिंग और अन्य आवश्यक कार्यों को करने के लिए अपनी डेटा परत में कार्यान्वित करते हैं।

चूंकि यह केवल एक विनिर्देश है , इसलिए इसे लागू करने के लिए आपको एक टूल की आवश्यकता है। वह उपकरण या तो हाइबरनेट, टॉपलिंक, आईबाटिस, वसंत-डेटा इत्यादि हो सकता है।

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

* ( यदि आपको याद है, तो आप import javax.persistence.*; करते import javax.persistence.*; जब आप हाइबरनेट में या मैपिंग (जैसे @Id, @Column, @GeneratedValue इत्यादि) के लिए एनोटेशन का उपयोग करते हैं, वहीं आप हाइबरनेट के तहत जेपीए का उपयोग कर रहे हैं, तो आप इसका उपयोग कर सकते हैं जेपीए की @Query और अन्य सुविधाएं भी )


जेपीए ओआरएम-एपीआई मानकीकृत करने का एक विनिर्देश है। हाइबरनेट एक जेपीए कार्यान्वयन का एक विक्रेता है। तो यदि आप हाइबरनेट के साथ जेपीए का उपयोग करते हैं, तो आप मानक जेपीए एपीआई का उपयोग कर सकते हैं, हाइबरनेट हुड के नीचे होगा, कुछ और गैर मानक कार्यों की पेशकश करेगा। http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html_single/ और http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/ देखें


जेपीए जेएसआर यानी ऑब्जेक्ट रिलेशनल मैपिंग को लागू करने के लिए जावा विशिष्टता आवश्यकता है जिसे इसके कार्यान्वयन के लिए कोई विशिष्ट कोड नहीं मिला है। यह जावा ऑब्जेक्ट्स और रिलेशनल डेटाबेस के बीच डेटा को एक्सेस करने, बनाए रखने और प्रबंधित करने के लिए नियमों के कुछ सेट को परिभाषित करता है। इसके परिचय के साथ, ईजेबी को प्रतिस्थापित किया गया क्योंकि जावा डेवलपर समुदाय द्वारा हेवीवेट होने के लिए इसकी आलोचना की गई थी। हाइबरनेट जेपीए को टी दिशानिर्देशों का उपयोग करके लागू किया जा सकता है। हाइबरनेट एक उच्च प्रदर्शन ऑब्जेक्ट / रिलेशनल दृढ़ता और क्वेरी सेवा है जिसे ओपन सोर्स जीएनयू लेसर जनरल पब्लिक लाइसेंस (एलजीपीएल) के तहत लाइसेंस प्राप्त है। इसका लाभ यह है कि आप जेपीए विनिर्देश के दूसरे कार्यान्वयन के लिए जेपीए के हाइबरनेट के कार्यान्वयन को स्वैप कर सकते हैं। जब आप सीधे हाइबरनेट का उपयोग करते हैं तो आप कार्यान्वयन में लॉक कर रहे हैं क्योंकि अन्य ओआरएम विभिन्न विधियों / कॉन्फ़िगरेशन और एनोटेशन का उपयोग कर सकते हैं, इसलिए आप केवल दूसरे ओआरएम पर स्विच नहीं कर सकते हैं।


जेपीए नृत्य है, हाइबरनेट नर्तक है।


जेपीए सिर्फ एक विनिर्देश है जबकि हाइबरनेट जेपीए प्रदाता में से एक है यानी हाइबरनेट जेपीए अनुबंध में उल्लिखित विभिन्न चीजों को लागू कर रहा है।


जेपीए सिर्फ एक विनिर्देश है जिसे ठोस कार्यान्वयन की आवश्यकता है। डिफ़ॉल्ट कार्यान्वयन ऑरैकल अब "Eclipselink" प्रदान करता है। (टॉपलिंक को ओरेकल द्वारा ईक्लीप्ससेंक के साथ विलय करने के लिए ग्रहण नींव से दान किया जाता है)

(संदर्भ: http://www.oracle.com/technetwork/middleware/toplink/index-085257.html http://www.eclipse.org/org/press-release/20080317_Eclipselink.php )

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

एक और जेपीए कार्यान्वयन ओपनजेपीए (openjpa.apache.org) है जो कोडो कार्यान्वयन का विस्तार है।


जेपीए सिर्फ एक विनिर्देश है। बाजार में कई विक्रेता हैं जो जेपीए लागू करते हैं। विभिन्न प्रकार के विक्रेताओं ने जेपीए को विभिन्न तरीकों से लागू किया। विक्रेताओं के विभिन्न प्रकार विभिन्न कार्यक्षमता प्रदान करते हैं इसलिए अपनी आवश्यकताओं के आधार पर उचित विक्रेता चुनें।

यदि आप जेपीए के बजाय हाइबरनेट या किसी अन्य विक्रेता का उपयोग कर रहे हैं, तो आप आसानी से एक्लेप्सेलिंक या ओपनजेपीए को हाइबरनेट में हाइबरनेट तक नहीं ले जा सकते हैं। लेकिन अगर आप जेपीए का उपयोग कर रहे हैं तो आपको केवल एक्सएमएल फाइल में इंस्टेंस करना होगा। इसलिए माइग्रेशन आसानी से संभव है जेपीए।


जेसीपी की भाषा और समझ के ऐतिहासिक परिप्रेक्ष्य के बिना कुछ चीजों को समझना बहुत मुश्किल है।

अक्सर तीसरे पक्ष होते हैं जो ऐसे पैकेज विकसित करते हैं जो फ़ंक्शन करते हैं या एक अंतर को भरते हैं जो आधिकारिक जेडीके का हिस्सा नहीं है। जेसीपी (जावा सामुदायिक प्रक्रिया) के माध्यम से काम करने वाले विभिन्न कारणों से जावा जेडीके का हिस्सा बन सकता है

हाइबरनेट (2003 में) ने अमूर्त एसक्यूएल के लिए एक रास्ता प्रदान किया और डेवलपर्स को लगातार ऑब्जेक्ट्स (ओआरएम) के मामले में और सोचने की अनुमति दी। आप अपनी इकाई वस्तुओं के बारे में हाइबरनेट को सूचित करते हैं और यह स्वचालित रूप से उन्हें जारी रखने के लिए रणनीति उत्पन्न करता है। हाइबरनेट ने ऐसा करने के लिए कार्यान्वयन प्रदान किया और एपीआई को या तो एक्सएमएल कॉन्फ़िगरेशन या एनोटेशन के माध्यम से कार्यान्वयन को चलाने के लिए।

मौलिक मुद्दा यह है कि आपका कोड एक विशिष्ट विक्रेता (हाइबरनेट) के साथ कसकर मिल जाता है जिसके लिए बहुत से लोगों को सोचा जाना चाहिए कि अधिक सामान्य होना चाहिए। इसलिए एक सामान्य दृढ़ता API की आवश्यकता है।

इस बीच, जेसीपी हाइबरनेट और अन्य ओआरएम उपकरण विक्रेताओं से बहुत सारे इनपुट के साथ जेएसआर 220 (जावा विशिष्टता अनुरोध) विकसित कर रहा था जिसके परिणामस्वरूप जेपीए 1.0 (2006) और अंत में जेएसआर 317 जेपीए 2.0 (200 9) था। ये एक सामान्य जावा पर्सिस्टेंस एपीआई के विनिर्देश हैं। एपीआई जेडीके में इंटरफेस के सेट के रूप में प्रदान की जाती है ताकि आपकी कक्षाएं जावैक्स पर निर्भर हो सकें। विशेष वस्तु के बारे में चिंता न करें जो आपके ऑब्जेक्ट्स को बनाए रखने का काम कर रही है। यह केवल एपीआई है और कार्यान्वयन नहीं है। हाइबरनेट अब कई विक्रेताओं में से एक बन गया है जो जेपीए 2.0 विनिर्देश को लागू करते हैं। आप जेपीए की तरफ कोड कर सकते हैं और जो भी अनुपालन ओआरएम विक्रेता आपकी जरूरतों को पूरा करता है उसे चुन सकते हैं।

ऐसे मामले हैं जहां हाइबरनेट आपको ऐसी सुविधाएं दे सकता है जो जेपीए में संहिताबद्ध नहीं हैं। इस मामले में, आप अपनी कक्षा में सीधे एक हाइबरनेट विशिष्ट एनोटेशन डालने का चयन कर सकते हैं क्योंकि जेपीए उस काम को करने के लिए इंटरफ़ेस प्रदान नहीं करता है।

स्रोत: http://www.reddit.com/r/java/comments/16ovek/understanding_when_to_use_jpa_vs_hibernate/


तुलनात्मक रूप से जेपीए बोलना सिर्फ इंटरफ़ेस है, हाइबरनेट / टॉपलिंक - कक्षा (यानी इंटरफ़ेस कार्यान्वयन)।

इंटरफ़ेस का उपयोग करने के लिए आपके पास इंटरफेस कार्यान्वयन होना चाहिए। लेकिन आप इंटरफेस के माध्यम से कक्षा का उपयोग कर सकते हैं, यानी जेपीए एपीआई के माध्यम से हाइबरनेट का उपयोग करें या आप सीधे कार्यान्वयन का उपयोग कर सकते हैं, यानी शुद्ध जेपीए एपीआई के माध्यम से सीधे हाइबरनेट का उपयोग करें।

जेपीए के बारे में अच्छी किताब Vlad Mihalcea का "उच्च प्रदर्शन जावा दृढ़ता" है।


हाइबरनेट एक जेपीए प्रदाता है।

कृष्णा श्रीनिवासन द्वारा जेपीए बनाम हाइबरनेट पेज:

जेपीए जावा ऑब्जेक्ट्स और रिलेशनल डेटाबेस के बीच डेटा को एक्सेस करने, बनाए रखने और प्रबंधित करने के लिए एक विनिर्देश है। जैसा कि परिभाषा इसकी एपीआई कहती है, यह केवल विनिर्देश है। एपीआई के लिए कोई कार्यान्वयन नहीं है। जेपीए मानक के बाद इंटरफेस के विकास के लिए नियमों और दिशानिर्देशों के सेट को निर्दिष्ट करता है। सीधे बिंदु पर: जेपीए ऑब्जेक्ट रिलेशनल मैपिंग (ओआरएम) को लागू करने के लिए सिर्फ दिशानिर्देश हैं और कार्यान्वयन के लिए कोई अंतर्निहित कोड नहीं है। जहां, हाइबरनेट जेपीए दिशानिर्देशों का वास्तविक कार्यान्वयन है। जब हाइबरनेट जेपीए विनिर्देश लागू करता है, तो यह विनिर्देशन में उल्लिखित सभी मानकों का पालन करने पर जेपीए समूह द्वारा प्रमाणित किया जाएगा। उदाहरण के लिए, जेपीए दिशानिर्देश जेपीए कार्यान्वयन के हिस्से के रूप में लागू किए जाने के लिए अनिवार्य और वैकल्पिक सुविधाओं की जानकारी प्रदान करेंगे।


JPA इंटरफ़ेस है जबकि हाइबरनेट कार्यान्वयन है।

परंपरागत रूप से कई जावा ओआरएम समाधान रहे हैं:

प्रत्येक कार्यान्वयन अपनी मैपिंग परिभाषा या क्लाइंट एपीआई परिभाषित करता है। जेपीए विशेषज्ञ समूह ने इन सभी उपकरणों में से सबसे अच्छा एकत्र किया और इसलिए उन्होंने जावा पर्सिस्टेंस एपीआई मानक बनाया।

एक मानक दृढ़ता API क्लाइंट बिंदु दृश्य से बहुत सुविधाजनक है, जिससे दूसरे के साथ एक कार्यान्वयन को स्विच करना अपेक्षाकृत आसान हो जाता है (हालांकि व्यावहारिक रूप से यह इतना आसान नहीं है क्योंकि बड़ी परियोजनाओं पर आपको विशिष्ट गैर मानक सुविधाओं का उपयोग करना होगा) ।

मानक जेपीए ने जावा ओआरएम प्रतियोगिता को एक नए स्तर पर धक्का दिया है और इससे केवल बेहतर कार्यान्वयन हो सकता है।

जैसा कि मेरी पुस्तक, हाई-परफॉर्मेंस जावा पर्सिस्टेंस में बताया गया है, हाइबरनेट उन सुविधाओं को प्रदान करता है जो अभी तक जेपीए द्वारा समर्थित नहीं हैं :

ये अतिरिक्त सुविधाएं बड़े उद्यम अनुप्रयोगों द्वारा मांगे जाने वाले कई दृढ़ता आवश्यकताओं को हल करने के लिए हाइबरनेट को अनुमति देती हैं।


जेपीए: एक इंटरफेस की तरह है और जेपीए में मौजूद कार्यों का उपयोग करने के लिए इसका कोई ठोस कार्यान्वयन नहीं है।

हाइबरनेट: सिर्फ एक जेपीए प्रदाता है जिसमें जेपीए में कार्यों का कार्यान्वयन है और इसमें कुछ अतिरिक्त कार्य हो सकते हैं जो जेपीए में नहीं हो सकते हैं।

टीआईपी: आप इसका उपयोग कर सकते हैं

     *combo 1* : JPA + JPA Provider(Hibernate) 
     *combo 2* : only Hiberante which does not need any interface 

कॉम्बो 1 : तब प्रयोग किया जाता है जब आपको लगता है कि आपका हाइबरनेट बेहतर प्रदर्शन नहीं दे रहा है और जेपीए प्रदाता को बदलना चाहता है, उस समय आपको एक बार फिर से अपना जेपीए लिखना नहीं है। आप एक और जेपीए प्रदाता लिख ​​सकते हैं ... और जितनी बार आप कर सकते हैं बदल सकते हैं।

कॉम्बो 2 : बहुत कम उपयोग किया जाता है जब आप किसी भी कीमत पर अपने जेपीए प्रदाता को नहीं बदल रहे हैं।

http://blog-tothought.rhcloud.com//post/2 जाएं, जहां आपका पूरा भ्रम स्पष्ट हो जाएगा।





orm