जेपीए और हाइबरनेट में क्या अंतर है? [बन्द है]


680

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

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

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

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

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

2
"जेपीए और हाइबरनेट के बीच अंतर" के बारे में सवाल गलत है। लड़ाई हाइबरनेट बनाम जेपीए व्यर्थ है। JPA API के साथ JPA के किसी भी कार्यान्वयन का उपयोग करने की सलाह दी जाती है ताकि विभिन्न ORM लागू करने से बचें।
बरगुआ मोहम्मद अमीन

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

मुझे वसंत में इस्तेमाल किए गए JpaTemplate के साथ एक भ्रम है "org.springframework.orm.jpa.JpaTemplate" इसके अपने कार्य हैं जैसे हठ (), ढूंढना (), मर्ज () आदि। कैसे चीजें हाइबरनेट के बिना काम कर रही हैं?
नाइटिन वर्मा

@nitinverma: यह वास्तव में एक अलग प्रश्न है। यदि आपको अभी भी उत्तर की आवश्यकता है, तो मेरा सुझाव है कि आप अधिक प्रतिक्रिया को आकर्षित करने के लिए अलग से अपना प्रश्न पूछें।
राउटर

जवाबों:


776

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

जब आप JPA के साथ हाइबरनेट का उपयोग करते हैं तो आप वास्तव में हाइबरनेट JPA कार्यान्वयन का उपयोग कर रहे हैं। इसका लाभ यह है कि आप JPA विनिर्देश के एक और कार्यान्वयन के लिए JPA के हाइबरनेट के कार्यान्वयन को स्वैप कर सकते हैं। जब आप सीधे हाइबरनेट का उपयोग करते हैं, तो आप कार्यान्वयन में लॉक कर रहे हैं क्योंकि अन्य ओआरएम विभिन्न तरीकों / कॉन्फ़िगरेशन और एनोटेशन का उपयोग कर सकते हैं, इसलिए आप बस दूसरे ओआरएम पर स्विच नहीं कर सकते हैं।

अधिक विस्तृत विवरण के लिए मेरे ब्लॉग प्रविष्टि को पढ़ें ।


5
तो, जब आप JPA के साथ हाइबरनेट का उपयोग कर रहे हैं, तो {java.persistence} एनोटेशन काम करेगा या आपको {org.hibernate} एनोटेशन का उपयोग करना होगा?
अमृता

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

3
@pubsy मैं सहमत हूं, लेकिन सिद्धांत रूप में जो एक विनिर्देशन के विक्रय बिंदुओं में से एक है।
केविन बोवर्सॉक्स

6
@Arruta आपके प्रश्न का उत्तर देने के लिए, जब कोई JPA के साथ हाइबरनेट का उपयोग कर रहा है, तो {java.persistence} एनोटेशन काम करेगा और {org.hibernate} एनोटेशन का उपयोग करने की आवश्यकता नहीं है।
शिक्षार्थी

3
@JavaGeek जब तक किसी के कोड जेपीए में उल्लिखित इंटरफ़ेस का उपयोग कर रहा है तब तक सच है। यदि कोई हाइबरनेट के लिए विशिष्ट सुविधाओं का उपयोग करता है तो उन्हें org.hibernateएनोटेशन का उपयोग करना होगा । इस पर अधिक
सूर्यवंशी

632

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


189
जेपीए आर्ट है, हाइबरनेट कलाकार है।
लकी

10
मुझे यह समझदारी पसंद है :) जेपीए एक निर्देशक है, हाइबरनेट एक अभिनेता है।
user3278897

7
/ परन्तु, डांसर (हाइबरनेट) के बिना नृत्य (जेपीए) यह प्रदर्शन कर सकते हैं नहीं है
RevanthKrishnaKumar वी

3
यह उत्तर कुछ भी स्पष्ट नहीं करता है, सिर्फ एक अस्पष्ट कहावत है।
आमिर कोस्ट

11
इस रूपक में समझ नहीं है। यदि आप पहले से ही अंतर जानते हैं, तो आप इसे आश्चर्यचकित करेंगे। यदि आप अंतर नहीं जानते हैं, तो भी आप इसे नहीं जान पाएंगे।
निक वोल्किन

158

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

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

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

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

इस बीच, Hibernate और अन्य ORM उपकरण विक्रेताओं के बहुत सारे इनपुट वाला जेसीपी JSR 220 (जावा स्पेसिफिकेशन रिक्वेस्ट) विकसित कर रहा था जिसके परिणामस्वरूप JPA 1.0 (2006) और अंततः JSR 317 जो कि JPA 2.0 (2009) है। ये एक सामान्य जावा पर्सिस्टेंस एपीआई के विनिर्देश हैं। JDK में इंटरफेस को इंटरफेस के एक सेट के रूप में प्रदान किया जाता है ताकि आपकी कक्षाएं javax.persistence पर निर्भर रह सकें और उस विशेष विक्रेता की चिंता न करें जो आपकी वस्तुओं को बनाए रखने का काम कर रहा है। यह केवल एपीआई है और कार्यान्वयन नहीं है। हाइबरनेट अब कई विक्रेताओं में से एक बन गया है जो जेपीए 2.0 विनिर्देश को लागू करते हैं। आप JPA की ओर कोड कर सकते हैं और जो भी आज्ञाकारी ORM विक्रेता आपकी आवश्यकताओं के अनुरूप है उसे उठा सकते हैं।

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

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


2
अच्छा इतिहास हिस्सा। जबकि अन्य उत्तर सिर्फ वही दोहरा रहे हैं जो प्रश्न में है।
राबर्ट

1
प्रबुद्धता की थिग्स के लिए धन्यवाद। आपने कहा कि जेपीए किया गया था क्योंकि आवेदन जहां हाइबरनेट के साथ युग्मित थे, यह अमूर्त की आवश्यकता थी, ठीक है। लेकिन क्या यह एक अनंत समस्या नहीं है? क्या अब एप्लिकेशन को JPA के बजाय tighly युग्मित नहीं किया गया है? यहाँ वास्तविक लाभ क्या है? मैं पहले से ही हाइबरनेट को एक अमूर्त परत के रूप में देखता हूं ...
एपेक्स

4
@Aphax ज़रूर, और जब आप कोड .java फ़ाइलें भी आप कसकर जावा को युग्मित कर रहे हैं, तो क्या होगा अगर मैं कल पायथन पर स्विच करना चाहता हूं?
स्मटजे

100

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

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

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

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

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

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

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


यह अच्छा है, मैं पहले अन्य ORM उपकरणों के बारे में नहीं जानता था
अवधूत

शानदार उत्तर और मैं पुस्तक का जबरदस्त आनंद ले रहा हूं! इसे जारी करने के लिए धन्यवाद!
जोनास जेस्चरिबर

मेरे उच्च-प्रदर्शन जावा दृढ़ता पुस्तक का आनंद लेने के लिए धन्यवाद ।
व्लादिमीर मिहालसी

यह ~ जेपीए इंटरफ़ेस है जबकि हाइबरनेट कार्यान्वयन है
एडी बी

57

से विकी

जावा पर्सिस्टेंस एपीआई बनाने के लिए प्रेरणा

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

जेसीपी पृष्ठ में बताया गया है कि ग्रहण लिंक जेपीए के लिए संदर्भ कार्यान्वयन है। पर नज़र इस जवाब इस बारे में अधिक बिट के लिए।

JPA में ही ऐसी विशेषताएं हैं जो एक मानक ORM ढांचे के लिए बनेगी। चूंकि जेपीए जावा ईई कल्पना का एक हिस्सा है, आप एक परियोजना में अकेले जेपीए का उपयोग कर सकते हैं और इसे किसी भी जावा ईई सर्वर के साथ काम करना चाहिए । हां, इन सर्वरों में जेपीए की युक्ति के लिए कार्यान्वयन होगा।

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


3
कहा कि आप एक परियोजना में अकेले जेपीए का उपयोग कर सकते हैं। ?? क्या आप हाइबरनेट, टॉपलिंक या किसी अन्य जेपीए कार्यान्वयन के उपयोग के बिना हैं?
अब्बास

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

1
मैंने सुना है कि JPA केवल एक इंटरफ़ेस / विनिर्देश है। यदि हम किसी परियोजना में अकेले जेपीए का उपयोग करते हैं तो उसका कार्यान्वयन कहां से होता है?
अब्बास

@abbas टिप्पणी के लिए धन्यवाद। मैंने उत्तर में अधिक विवरण जोड़ दिए हैं। उम्मीद है की यह मदद करेगा।
मनुक्प

1
@Forhad हमेशा एक कार्यान्वयन की आवश्यकता होती है, चाहे इसका सर्वर सर्वर में कुछ दफन हो या नहीं, इससे कोई फर्क नहीं पड़ता है, बस कुछ JPA लाइब्रेरी को डाउनलोड करने का कोई तरीका नहीं है और यह आपके लिए दृढ़ता का प्रदर्शन करता है।
केविन बोवर्सॉक्स

15

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

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

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

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


15

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

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

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

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

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

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

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


11

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


2
और उसके ऊपर हाइबरनेट कुछ और सुविधाएँ / विधियाँ जोड़ता है।
राय.कुमार

10

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


5

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

यदि आप JPA के बजाय Hibernate या किसी अन्य विक्रेता का उपयोग कर रहे हैं, तो आप आसानी से Hibernate को EclipseLink या OpenJPA से Hibernate में स्थानांतरित नहीं कर सकते। लेकिन यदि आप JPA का उपयोग करते हैं, तो बस आपको दृढ़ता से XML फ़ाइल में परिवर्तन करना होगा। इसलिए माइग्रेशन आसानी से संभव है जेपीए।


4

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

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

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


4

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


3

जावा - इसकी स्वतंत्रता न केवल ऑपरेटिंग सिस्टम से है, बल्कि विक्रेता से भी है।

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


3

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

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

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

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


2

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

आप जेपीए को नियमों के एक सेट के रूप में सोच सकते हैं जो कि हाइबरनेट द्वारा लागू किया गया है।


2

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


1

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

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

एक और JPA कार्यान्वयन OpenJPA है, जो कोडो कार्यान्वयन का विस्तार है।

जेपीए बनाम हाइबरनेट


1

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

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

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

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

1 और बात

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

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

धन्यवाद


सलाह के लिए धन्यवाद
राजीव बघेल

0

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


0

जेपीए या जावा पर्सिस्टेंस एपीआई ओआरएम कार्यान्वयन के लिए एक मानक विनिर्देश है जबकि हाइबरनेट वास्तविक ओआरएम कार्यान्वयन या ढांचा है।


-1

JPA Java Persistence API है। जो एपीआई के लिए केवल विशिष्टताओं को निर्दिष्ट करता है। इसका मतलब है कि एपीआई बनाने के लिए नियमों और दिशानिर्देशों का सेट। यदि कोई अन्य संदर्भ कहता है, तो यह मानकों का सेट है जो उन एपीआई को बनाने के लिए आवरण प्रदान करता है, डेटाबेस से इकाई वस्तु तक पहुंचने के लिए उपयोग किया जा सकता है। JPA oracle द्वारा प्रदान किया जाता है। जब हम डेटाबेस एक्सेस करने जा रहे हैं, तो हमें निश्चित रूप से इसके कार्यान्वयन की आवश्यकता है। इसका मतलब है कि JPA API को लागू करने के लिए केवल दिशा-निर्देश निर्दिष्ट करता है। हाइबरनेट एक जेपीए प्रदाता / विक्रेता है जो उस एपीआई को लागू करने के लिए जिम्मेदार है। हाइबरनेट टॉपलिंक और ओपन जेपीए की तरह जेपीए एपीआई प्रदाताओं के कुछ उदाहरण हैं। इसलिए हम हाइबरनेट के माध्यम से जेपीए निर्दिष्ट मानक एपीआई का उपयोग करते हैं।


-2

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

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

जेपीए के बारे में अच्छी किताब व्लाद मिहालसी के "हाई-परफॉर्मेंस जावा पर्सिस्टेंस" है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.