हाइबरनेट बनाम जेपीए बनाम जेडीओ - प्रत्येक के पेशेवरों और विपक्ष? [बन्द है]


174

मैं एक अवधारणा के रूप में ORM से परिचित हूं, और मैंने .NET प्रोजेक्ट के लिए कई साल पहले nHibernate का भी उपयोग किया है; हालाँकि, मैंने जावा में ORM के विषय को नहीं रखा है और इनमें से किसी भी उपकरण का उपयोग करने का मौका नहीं दिया है।

लेकिन, अब मेरे पास विरासत की वेब सेवाओं की एक श्रृंखला से दूर जाने के प्रयास में, हमारे एक आवेदन के लिए कुछ ओआरएम टूल्स का उपयोग शुरू करने का मौका हो सकता है।

मुझे एक मुश्किल समय यह बता रहा है कि जेपीए कल्पना के अंतर को बताने के लिए, आपको हाइबरनेट लाइब्रेरी के साथ क्या मिलता है, और जेडीओ को क्या पेशकश करनी है।

इसलिए, मैं समझता हूं कि यह सवाल थोड़ा खुला हुआ है, लेकिन मैं कुछ राय पाने की उम्मीद कर रहा था:

  • प्रत्येक का भला - बुरा क्या है?
  • आप एक नई परियोजना के लिए क्या सुझाव देंगे?
  • क्या कुछ शर्तें हैं जब यह एक फ्रेम बनाम दूसरे का उपयोग करने के लिए समझ में आएगा?

जवाबों:


112

कुछ नोट:

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

IMO, मैं हाइबरनेट की सिफारिश करूंगा।


यदि आपको हाइबरनेट-विशिष्ट सुविधाओं का उपयोग करने की आवश्यकता है तो आपको क्या करना चाहिए, इसके बारे में कुछ टिप्पणियां / प्रश्न आए हैं । इसे देखने के कई तरीके हैं, लेकिन मेरी सलाह होगी:

  • यदि आप विक्रेता टाई-इन की संभावना से चिंतित नहीं हैं, तो हाइबरनेट, और अपने निर्णय लेने में विभिन्न विक्रेता विशिष्ट एक्सटेंशन सहित अन्य JPA और JDO कार्यान्वयनों के बीच अपनी पसंद करें।

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

वास्तव में, आपको संभवतः ट्रेड-ऑफ करने की आवश्यकता होगी कि आप वेंडर-इन-बनाम से कितने चिंतित हैं, आपको उन वेंडर विशिष्ट एक्सटेंशन की कितनी आवश्यकता है।

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


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

1
यदि मुझे हाइबरनेट से कुछ विशिष्ट सुविधा की आवश्यकता है तो जेपीए का उपयोग करने के क्या फायदे होंगे?
ब्रूनो रीस

22
एक महत्वपूर्ण नोट जो जोड़ा जाना चाहिए: जबकि JPA और JDO दोनों को RDBMSes के लिए उत्कृष्ट समर्थन है, JDO 'डेटास्टोर' अज्ञेयवादी है और इसलिए यह RDBMS दुनिया तक सीमित नहीं है। वर्तमान में NoSQL के ग्राउंड स्वेल के साथ एक व्यक्ति बुद्धिमानता मानक का उपयोग करने पर विचार करने के लिए बुद्धिमान होगा जो पारंपरिक * एसक्यूएल दुनिया में अपने ऐप को लॉक करने से बचता है। JDO अनुप्रयोगों को आसानी से गैर RDBMS डेटास्टोर्स पर तैनात किया जा सकता है। समर्थित डेटास्टोर्स की पूरी सूची यहां पाई जा सकती है: datanucleus.org/products/accessplatform/datastores.html
वोक्समैन

2
@ गोल्फमैन क्यों हो सकता है के आधार पर चयन करें ? अगर आप कभी भी खत्म किया NoSQL समर्थन ... KISS की आवश्यकता होगी, वरना बाद में कुछ में रोलिंग से आप को रोकने के लिए कुछ भी नहीं है
टीएम।

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

69

सुनिश्चित करें कि आप JDO के DataNucleus कार्यान्वयन का मूल्यांकन करते हैं। हमने हाइबरनेट के साथ शुरुआत की क्योंकि यह इतना लोकप्रिय प्रतीत हुआ लेकिन बहुत जल्द ही एहसास हुआ कि यह 100% पारदर्शी दृढ़ता समाधान नहीं है। बहुत सारे कैविएट हैं और डॉक्यूमेंटेशन भरा हुआ है 'यदि आपके पास यह स्थिति है तो आपको अपना कोड इस तरह लिखना होगा' जो कि स्वतंत्र रूप से मॉडलिंग और कोडिंग का मज़ा ले लेता है। जेडीओ ने मुझे कभी भी अपने कोड या अपने मॉडल को समायोजित करने के लिए इसे 'ठीक से काम' करने के लिए नहीं किया है। मैं केवल सरल पीओजेओ को डिज़ाइन और कोड कर सकता हूं जैसे कि मैं उन्हें केवल 'मेमोरी' में उपयोग करने जा रहा था, फिर भी मैं उन्हें पारदर्शी रूप से जारी रख सकता हूं।

हाइबरनेट पर JDO / DataNucleus का अन्य लाभ यह है कि इसमें सभी रन टाइम रिफ्लेक्शन ओवरहेड नहीं है और अधिक मेमोरी कुशल है क्योंकि यह बिल्ड टाइम बाइट कोड एन्हांसमेंट का उपयोग करता है (हो सकता है कि किसी बड़ी परियोजना के लिए आपके निर्माण समय में 1 सेकंड जोड़ें) हाइबरनेट के रन टाइम रिफ्लेक्टेड प्रॉक्सी पैटर्न से।

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

यहां आप हाइबरनेट के साथ प्राप्त निराशा का एक उदाहरण देंगे जो आपको JDO के साथ नहीं मिलेगा:

http://blog.andrewbeacock.com/2008/08/how-to-implement-hibernate-safe-equals.html
http://burtbeckwith.com/blog/?p=53

यदि आप 'वर्कअराउंड्स' को कोडिंग पसंद करते हैं, तो निश्चित रूप से, हाइबरनेट आपके लिए है। यदि आप स्वच्छ, शुद्ध, वस्तु उन्मुख, मॉडल संचालित विकास की सराहना करते हैं, जहां आप अपना सारा समय मॉडलिंग, डिजाइन और कोडिंग में बिताते हैं और बदसूरत वर्कअराउंड पर इसका कोई भी उपयोग नहीं करते हैं तो JDO / DataNucleus का मूल्यांकन करने में कुछ घंटे बिताएं । निवेश किए गए घंटे एक हजार गुना चुकाए जाएंगे।

अद्यतन फ़रवरी 2017

काफी समय से अब DataNucleus के JDO दृढ़ता के मानक के अलावा JPA दृढ़ता मानक लागू करता है इसलिए Hibernate से DataNucleus तक मौजूदा JPA प्रोजेक्ट्स को पोर्ट करना बहुत सीधा होना चाहिए और आप बहुत कम कोड परिवर्तन के साथ DataNucleus के उपरोक्त सभी लाभों को प्राप्त कर सकते हैं। , यदि कोई। तो सवाल के संदर्भ में, एक विशेष मानक, JPA (RDBMS केवल) बनाम JDO (RDBMS + No SQL + ODBMSes + others) का विकल्प, DataNucleus दोनों का समर्थन करता है, Hibernate केवल JPA तक ही सीमित है।

हाइबरनेट DB अपडेट्स का प्रदर्शन

ORM का चयन करते समय विचार करने के लिए एक और मुद्दा इसके गंदे चेकिंग तंत्र की दक्षता है - यह तब बहुत महत्वपूर्ण हो जाता है जब मौजूदा लेन-देन में बदल गई वस्तुओं को अपडेट करने के लिए SQL का निर्माण करने की आवश्यकता होती है - खासकर जब बहुत सारी वस्तुएं होती हैं। इस SO उत्तर में हाइबरनेट के गंदे जाँच तंत्र का विस्तृत तकनीकी वर्णन है: HIBERNATE के साथ JPA बहुत धीमा है


3
और जैसा कि हम सभी जानते हैं, एन्हांसमेंट ठीक यही है कि जेडीओ को इतने व्यापक रूप से क्यों अपनाया गया है!
पास्कल थिवेंट

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

7
JDO की विफलता की शुरुआत के बाद से भविष्यवाणी की गई थी ( javalobby.org/forums/thread.jspa?forumID=46&threadID=1326 ) और हाइबरनेट से पहले ताकि आप हाइबरनेट को दोष न दे सकें। हाइबरनेट / टॉपलिंक सफल हुआ जहां सन और जेडीओ खिलाड़ी (और उनके ओओडीबीएमएस) विफल रहे क्योंकि वे उस समय बेहतर जवाब थे, न कि मार्केटिंग और एफयूडी के कारण। अवधि। कौन परवाह करता है अगर एएसएम आज तेजी से धधक रहा है , तो यह 5+ साल पहले नहीं था, जब जरूरत थी और जेडीओ बस लड़ाई हार गया। JDO वैचारिक रूप से श्रेष्ठ है? बहुत बुरा, यह समय पर विजेता कार्यान्वयन होने में विफल रहा (और जेपीए के कारण वापस नहीं आएगा)।
पास्कल थिवेंट

2
मेरे शब्दों को स्पष्ट करने के लिए (फिर भी एक और पोस्ट जो उस दर्द को दिखाता है जो लोग विकास के दौरान महसूस कर रहे थे या हाइबरनेट ने लड़ाई क्यों जीती थी): mail-archive.com/open-jpa-dev@incubator.apache.org/… । मुझे यह स्पष्ट प्रतीत होता है कि प्रतिबिंब / cglib लोगों की समस्याओं का एक व्यावहारिक उत्तर था (और लोग परवाह नहीं करते हैं कि अगर कोई एपीआई वैचारिक रूप से बेहतर है यदि यह उपयोग करने के लिए एक दर्द है) और मुझे यहां कोई हाइबरनेट मुख्य खिलाड़ी नहीं दिखाई देते हैं, तो बस उपयोगकर्ता । इसलिए अंत में मुझे आश्चर्य होता है कि वास्तव में FUD कौन फैला रहा है ...
पास्कल थिवेंट

7
खैर यह निश्चित रूप से पुराने दिनों की तरह नहीं है जहां कम से कम 17 अलग-अलग प्रो हाइबरनेट FUD पोस्ट होते थे (फिर भी केवल 3 अलग-अलग आईपी पते से आते हैं। मैथ्स लोग =)।
वोल्क्समैन

54

मैंने हाल ही में एक जावा परियोजना के लिए दृढ़ता और मूल्यांकन का मूल्यांकन किया है और मेरे निष्कर्ष इस प्रकार हैं:

मैं यह देख रहा हूं कि जेडीओ के पक्ष में समर्थन मुख्य रूप से है:

  • आप गैर-sql डेटा स्रोत, db4o, hbase, ldap, bigtable, couchdb (कैसेंड्रा के लिए प्लग इन) आदि का उपयोग कर सकते हैं।
  • आप आसानी से एक sql से गैर-sql डेटा स्रोत पर जा सकते हैं और इसके विपरीत।
  • कोई प्रॉक्सी ऑब्जेक्ट और इसलिए हैशकोड () और बराबर () कार्यान्वयन के संबंध में कम दर्द
  • अधिक POJO और इसलिए कम वर्कअराउंड की आवश्यकता है
  • अधिक संबंध और क्षेत्र प्रकारों का समर्थन करता है

और जेपीए के पक्ष में समर्थन मुख्य रूप से है:

  • अधिक लोकप्रिय
  • jdo मर चुका है
  • bytecode वृद्धि का उपयोग नहीं करता है

मैं JPA डेवलपर्स के बहुत से समर्थक JPA पोस्ट देख रहा हूं जिन्होंने स्पष्ट रूप से JDO / Datanucleus का उपयोग नहीं किया है जो JDO का उपयोग नहीं करने के लिए कमजोर तर्क प्रस्तुत करते हैं।

मैं जेडीओ के बहुत से पोस्ट भी देख रहा हूं, जो जेडीओ में चले गए हैं और परिणामस्वरूप बहुत खुश हैं।

JPA के अधिक लोकप्रिय होने के संबंध में, ऐसा लगता है कि यह तकनीकी रूप से श्रेष्ठ होने के बजाय RDBMS विक्रेता समर्थन के कारण भाग में है। (मेरे लिए वीएचएस / बेटामैक्स की तरह लगता है)।

JDO और इसका संदर्भ कार्यान्वयन Datanucleus स्पष्ट रूप से मृत नहीं है, जैसा कि GAE के लिए Google द्वारा इसे अपनाने और स्रोत-कोड (http://sourceforge.net/projects/datanucleus/) पर सक्रिय विकास द्वारा दिखाया गया है।

मैंने जेडीओ के बारे में बहुत सारी शिकायतें बायटेककोड बढ़ाने के कारण देखी हैं, लेकिन यह अभी तक कोई स्पष्टीकरण नहीं है कि यह खराब क्यों है।

वास्तव में, ऐसी दुनिया जो NoSQL समाधानों के प्रति अधिक से अधिक जुनूनी हो रही है, JDO (और डेटान्यूक्लियस कार्यान्वयन) एक अधिक सुरक्षित शर्त लगती है।

मैंने अभी JDO / Datanucleus का उपयोग शुरू किया है और इसे स्थापित किया है ताकि मैं db4o और mysql का उपयोग करने के बीच आसानी से स्विच कर सकूं। यह तेजी से विकास के लिए db4o का उपयोग करने के लिए सहायक है और डीबी स्कीमा के बारे में बहुत अधिक चिंता करने की ज़रूरत नहीं है और फिर, जब एक डेटाबेस को तैनात करने के लिए स्कीमा को स्थिर किया जाता है। मुझे यह भी विश्वास है कि बाद में, मैं अपने आवेदन के सभी / भाग को जीएई में तैनात कर सकता था या वितरित भंडारण / मानचित्र-लाभ को कम कर सकता था, एक बहुत कम प्रतिक्षेप के बिना एक ला हबेस / हडूप / कैसेंड्रा को कम कर सकता था।

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

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

यदि आप चाहते हैं कि गर्म उधम मचाते हुए कि आप अन्य डेवलपर्स / भेड़ के बहुमत के रूप में कर रहे हैं, तो JPA / हाइबरनेट चुनें। यदि आप अपने क्षेत्र में नेतृत्व करना चाहते हैं, तो JDO / Datanucleus को ड्राइव करें और अपना खुद का दिमाग बनाएं।


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

4
पास्कल - आप यहाँ एक कोने में अपने आप से बहस कर रहे हैं। मुझे लगता है कि आप अक्सर पूछे जाने वाले प्रश्न के विज्ञापन खंड का बिंदु याद कर रहे हैं। ओपी ने 2 तकनीकों के बारे में राय मांगी। यह दोनों पक्षों का समर्थन करने वालों को आगे आने और अपनी रचनात्मक आलोचनाओं / सिफारिशों को प्रस्तुत करने के लिए आमंत्रित कर रहा है। एंडी / दातान्यूक्लियस और अन्य जेडीओ उपयोगकर्ताओं के लिए जेडीओ सकारात्मकता को उजागर करने और आलोचनाओं के खिलाफ बचाव करने के लिए हाइबरनेट का उपयोग करने की सिफारिश करने वाले किसी और से अधिक विज्ञापन नहीं है।
टॉम

5
आप अक्सर पूछे जाने वाले प्रश्न के अनुभाग का उल्लेख करने के लिए अच्छा कर सकते हैं जो कहता है कि इस विषय पर आपके पोस्ट के लिए 'बी नीस' है, जो कि आकस्मिक, टकराव या सादे असभ्य है। आपकी पहली वृद्धि के बारे में व्यंग्यात्मक टिप्पणी थी। दूसरा; प्रारंभिक कार्यान्वयन की कठिनाइयों पर एक शेख़ी और अब प्रासंगिक नहीं है। तीसरा एक बचकाना मजाक था और उन लोगों के लिए अपमानजनक था जो RDBMS का उपयोग नहीं करना पसंद कर सकते हैं। चौथा किसी का व्यंग्यात्मक मज़ाक था जो आपके लिए अलग विचार रखता है। पांचवां हमला था; मुझे तोता बुला रहा है। क्या आप इसे 'अच्छा होना' मानते हैं?
टॉम

3
यदि आपके पास जेडीओ के साथ एक भयानक अनुभव था, तो समझाइए कि क्या भयानक था, स्वीकार करें कि यह पहले के संस्करण के साथ था और तब से चीजों में सुधार हो सकता है। आपको यह भी पहचानने की जरूरत है कि दूसरों की आपके लिए अलग जरूरतें हो सकती हैं। सिर्फ इसलिए कि आप JPA से 'संतुष्ट' हैं और RDBMS का उपयोग करना चाहते हैं इसका मतलब यह नहीं है कि अन्य हैं। हो सकता है कि अपनी प्रतिष्ठा बढ़ाने की जल्दबाजी में आप यह देख चुके हों कि पुरस्कार के लिए क्या प्रतिष्ठा है? ps। एक डेवलपर के रूप में आपको वास्तव में ऐसी परियोजनाओं की भलाई में रुचि होनी चाहिए, जो नवाचार को संचालित करती हैं और विक्रेता-लॉक को कम करती हैं।
टॉम

6
यह मेरी अंतिम प्रतिक्रिया होगी :) .. 1. अगर यह सवाल उठना लाजमी नहीं था कि इसे क्यों उठाया जाए? 2. मैंने आपकी ईमानदारी पर कभी सवाल नहीं उठाया, मैंने कहा कि आप अन्य पोस्टरों के साथ अच्छे नहीं थे और आपने खुद का विरोध किया। 3. किसी ने भी आपको सुझाव नहीं दिया कि आप 8+ वर्ष का सारांश दें - लेकिन अपने बयानों को ऐसे व्यक्तिपरक तथ्यों के बजाय तथ्यों और उदाहरणों के साथ वापस लें, जो अपमानजनक होने की संभावना है। 5. इस पद पर 'हाइबरनेट / जेपा / जेबॉस बुराई है' कहां है? मैं इसे नहीं देखता। मैं केवल आपकी JDO विरोधी टिप्पणियों को देखता हूं।
टॉम

40

आप एक नई परियोजना के लिए क्या सुझाव देंगे?

मैं ना तो सुझाव दूंगा! स्प्रिंग DAO के JdbcTemplateसाथ StoredProcedure, RowMapperऔर RowCallbackHandlerइसके बजाय का उपयोग करें ।

हाइबरनेट के साथ मेरा अपना व्यक्तिगत अनुभव यह है कि सहेजे गए समय की समाप्ति उन दिनों की तुलना में अधिक होती है जब आप अप्रत्याशित कैस्केडिंग अपडेट व्यवहार जैसे मुद्दों को समझने और उन्हें डिबग करने की कोशिश कर रहे लाइन को समाप्त कर देंगे।

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


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

23
@groryory - मैं हाइबरनेट मुद्दों को समझने की कोशिश करते हुए बर्बाद होने वाले दिनों के बहुत अनुभव के साथ बोलता हूं, जैसे कैस्केडिंग अपडेट / डिलीट, हास्यास्पद रूप से अक्षम क्वेरी संरचनाएं आदि। ORM समाधान रिलेशनल डेटाबेस की अपर्याप्त समझ वाले लोगों के लिए "त्वरित-जीत" हैं। जैसे, यह संभावना नहीं है कि हाइबरनेट का ज्ञान अकेले एक अच्छा अंत-उत्पाद होगा। यह मेरा अनुभव है कि, परियोजना के जीवनचक्र पर, हाइबरनेट (और विस्तार द्वारा ORM) से अधिक समय खर्च होता है
oxbow_lakes

8
खेद है कि आपको हाइबरनेट के साथ ऐसा खराब अनुभव हुआ। मैं स्वयं भारी डेटाबेस / SQL / संग्रहीत कार्यविधि / JDBC स्कूल से आ रहा हूँ। मैं यह नहीं कह सकता कि मैं रूपांतरित हूं - ऊपर की प्रत्येक तकनीक अभी भी एक जगह है। लेकिन सामान्य प्रयोजन के लिए जावा 3-स्तरीय एप्लिकेशन (कोई फर्क नहीं पड़ता कि आकार क्या है) पहली पसंद एक ओआरएम तकनीक है - अधिमानतः जेपीए 2। अन्य को ऐसे कारकों पर आधारित माना जाता है विरासत कोड, एकीकरण, विशेषज्ञता, बैच-भारी आवश्यकताएं, वास्तविक समय प्रदर्शन आदि जो अलग-अलग डेटाबेस प्रौद्योगिकी स्टैक के प्रति दृष्टिकोण (या नहीं) कर सकते हैं।
टॉपचेफ

3
मैं ऊपर "त्वरित-जीत" परिभाषा से पूरी तरह असहमत हूं - बस एक्शन में हाइबरनेट को पकड़ो ( stackoverflow.com/questions/96729/… ) (और यह JPA 1 है, JPA 2 के साथ यह केवल बेहतर हो जाता है) इस तकनीक को पूरी तरह से समझने और कवरेज करने के लिए है।
टॉपचेफ

7
मैंने थोड़ा शोध किया और स्प्रिंग अब स्प्रिंग डीएओ ( static.springsource.org/spring/docs/3.0.x/… ) की सिफारिश करता है: "अनुशंसित एकीकरण शैली सादे हाइबरनेट, जेपीए और जेडीओ एपीआई के खिलाफ डीएओ को कोड करने के लिए है।" स्प्रिंग के DAO टेम्प्लेट का उपयोग करने की पुरानी शैली अब अनुशंसित नहीं है? "... क्या यह वही है जो आप सुझा रहे थे? यदि हां, तो वे इसकी सिफारिश क्यों नहीं करते?
यूजर 1

23

जेडीओ मर चुका है

जेडीओ वास्तव में मरा नहीं है इसलिए कृपया अपने तथ्यों की जांच करें। JDO 2.2 अक्टूबर 2008 में जारी किया गया था। JDO 2.3 का विकास जारी है।

यह अपाचे के तहत, खुले तौर पर विकसित किया गया है। JPA की तुलना में अधिक रिलीज़ हुई हैं, और JPA2 प्रस्तावित सुविधाओं के लिए भी इसका ORM विनिर्देश अभी भी अग्रिम है


12
DataNucleus है कि कई उपयोगकर्ताओं, Xcalia, कोदो मन कभी नहीं द्वारा सबूत के रूप में, लोग सबसे निश्चित रूप से इसका उपयोग कर रहे हैं। आप मूल विचार को याद करते हैं कि जेडीओ और जेपीए एक ही बाजार को नहीं भर रहे हैं। JPA विशेष रूप से RDBMS है। JDO डेटास्टोर अज्ञेयवादी है और इसका उपयोग RDBMS के लिए किया जाता है, लेकिन LDAP, XML, Excel, OODBMs आदि
DataNucleus

3
मुझे गैर-आरडीबीएमएस कारक पसंद है, विशेष रूप से गैर-आरडीबीएमएस समाधानों की लोकप्रियता में वृद्धि के साथ, यह एक बड़ी बात है। इसका मतलब यह है कि अगर जेपीए पर्याप्त तेजी से विकसित नहीं होता है, तो "अधिक खुला" और लचीले विकल्प (जेडडीओ) की उपलब्धता का मतलब है कि जेपीए की लोकप्रियता आवश्यकता से बाहर हो जाएगी। कभी भी तकनीकी तर्कों का ध्यान न रखें कि जेडीओ अधिक पूर्ण, श्रेष्ठ, परिपक्व, या जो कुछ भी है - यह वरीयता का विषय नहीं होगा । यह समझ में आता है कि RDBMS विक्रेता संदिग्ध व्यवहार कर रहे हैं - RDBMS बाजार के प्रभुत्व के दिन समाप्त हो सकते हैं।
मैनियस

हम अभी भी 2019 में JDO / DataNucleus का उपयोग कर रहे हैं! यह अब संस्करण 5.x तक है और फिर भी डेवलपर उत्पादकता और रनटाइम प्रदर्शन के लिए हाइबरनेट को हराता है। हाल ही में मुझे हाइबरनेट का उपयोग करते हुए एक बड़े वेब ऐप पर कुछ परामर्श करना था और मुझे उस दर्द की याद दिलाई गई जब मैं कई साल पहले एक सक्रिय HIbernate उपयोगकर्ता और प्रमोटर था, ए टीम लीड ने मुझे विश्वास नहीं किया जब मैंने उसे बताया कि उसका बीओएलबी क्षेत्र हमेशा बेसब्री से लटके रहने के बावजूद इसे उत्सुकता से देखा गया। एक "अनुभवी" स्वघोषित हाइबरनेट विशेषज्ञ द्वारा "हुड के तहत" ज्ञान की पूरी कमी दुखद रूप से परेशान थी लेकिन उम्मीद थी।
वोल्समैन


10

मैं जेपीए (अपाचे से ओपनजेपीए कार्यान्वयन का उपयोग कर रहा हूं जो कोडो जेडडीओ कोडबेस पर आधारित है जो 5+ वर्ष पुराना है और अत्यंत तेज़ / विश्वसनीय है)। IMHO जो कोई भी आपको चश्मा को बायपास करने के लिए कहता है, आपको बुरी सलाह दे रहा है। मैंने समय दिया और निश्चित रूप से पुरस्कृत किया गया। या तो JDO या JPA के साथ आप कम से कम बदलाव के साथ विक्रेताओं को बदल सकते हैं (JPA के पास ऑरम मैपिंग है इसलिए हम विक्रेताओं को बदलने के लिए एक दिन से भी कम समय में बात कर रहे हैं)। यदि आपके पास 100+ टेबल हैं जैसे कि मैं ऐसा करता हूं तो यह बहुत बड़ा है। इसके अलावा आप क्लस्टर-वार कैश निष्कासन और इसके सभी अच्छे के साथ अंतर्निहित0 कैशिंग प्राप्त करें। SQL / Jdbc उच्च प्रदर्शन प्रश्नों के लिए ठीक है, लेकिन पारदर्शी एल्गोरिदम आपके एल्गोरिदम और डेटा इनपुट दिनचर्या को लिखने के लिए बहुत बेहतर है। मेरे पास अपने पूरे सिस्टम (कोड की 50k + लाइनें) में केवल 16 SQL क्वेरी हैं।


8

मैं खुद इस पर गौर कर रहा हूं और दोनों के बीच एक मजबूत अंतर नहीं पा सकता। मुझे लगता है कि बड़ा विकल्प यह है कि आप किस कार्यान्वयन में उपयोग करते हैं। खुद के लिए मैं DataNucleus प्लेटफ़ॉर्म पर विचार कर रहा हूं क्योंकि यह दोनों का डेटा-स्टोर अज्ञेय कार्यान्वयन है।


6
DataNucleus के लिए +1, उत्तर के लिए नहीं।
वोल्फमैनड्रैगन

8

जो कोई भी कहता है कि जेडीओ मर चुका है, एक ज्योतिषी FUD मोंगर है और वे इसे जानते हैं।

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

यदि आप अपने आप को केवल उसी सीमा तक सीमित रखना चाहते हैं जो जेपीए के मानक में उपलब्ध है तो आप जेपीए को लिख सकते हैं और डेटान्यूक्लियस को उच्च प्रदर्शन के रूप में उपयोग कर सकते हैं, जेपीए के अन्य कार्यान्वयनों की तुलना में अधिक पारदर्शी दृढ़ता। बेशक DataNucleus भी JDO मानक को लागू करता है यदि आप JDO लाते हैं तो मॉडलिंग की लचीलापन और दक्षता चाहते हैं।


1
या आप एक बहुत बड़ा और परिणामस्वरूप अधिक उत्तरदायी समुदाय के साथ एक और (ठीक) कार्यान्वयन का उपयोग करते हैं। हां, कुछ लोग इसका ध्यान रखते हैं।
पास्कल थिवेंट

1
और आप FUD> :) मजेदार के बारे में बात करते हैं।
पास्कल थिवेंट

2
आपकी टिप्पणी से लगता है कि मैंने हाइबरनेट और JDO दोनों का उपयोग नहीं किया है।
वॉल्क्समैन

2
इस धागे से एक बहुत से लोगों के लिए एक महान संदर्भ लगता है कि डेटान्यूक्लियस कितना महान है। कृपया इस स्थान का उपयोग अपने विज्ञापन प्लेटफ़ॉर्म के रूप में न करें।
टीएम।

3
गोल्फर से कोई आश्चर्य की बात नहीं है जो जेपीए या डेटान्यूक्लियस (जिसमें वह 1996 से उपयोग कर रहा है , इससे पहले भी अस्तित्व में था !) में एक ही हताश विपणन सामान को बार-बार फेंक रहा है ।
पास्कल थिवेंट

2

मैंने एक ही परियोजना में हाइबरनेट (JPA कार्यान्वयन) और JPOX (JDO कार्यान्वयन) का उपयोग किया है। JPOX ने ठीक काम किया, लेकिन काफी तेजी से बग में भाग गया, जहां कुछ जावा 5 भाषा सुविधाएँ थीं, जो उस समय समर्थन नहीं करती थीं। इसमें XA लेनदेन के साथ अच्छा खेलने में समस्याएं थीं। मैं JDO ऑब्जेक्ट्स से डेटाबेस स्कीमा उत्पन्न कर रहा था। यह हर बार एक डेटाबेस से जुड़ना चाहता था जो कि आपके ओरेकल कनेक्शन के काम न करने पर कष्टप्रद है।

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

कुछ अन्य उत्तरदाताओं ने सिर्फ SQL का उपयोग करने का सुझाव दिया है। ऑब्जेक्ट रिलेशनल मैपिंग के लिए वास्तविक हत्यारा उपयोग मामला परीक्षण और विकास है। बड़े डेटा को संभालने के लिए बनाए गए डेटाबेस आमतौर पर महंगे होते हैं और उन्हें स्थापित करना मुश्किल होता है। उनका परीक्षण मुश्किल है। बहुत सारे इन-मेमोरी जावा डेटाबेस हैं जिनका उपयोग परीक्षण करने के लिए किया जा सकता है, लेकिन आमतौर पर उत्पादन के लिए बेकार होते हैं। एक वास्तविक, लेकिन सीमित डेटाबेस का उपयोग करने में सक्षम होने से विकास उत्पादकता और कोड विश्वसनीयता बढ़ जाएगी।


1
जहां तक ​​मैं बता सकता हूं, JPOX ने नाम बदलकर DataNucleus (और तब से रिलीज किया है)।
डोनाल्ड फेलो

2
सोचें कि आप वास्तव में पाएंगे कि डेटन्यूक्लियस के पास अन्य सॉफ़्टवेयरों की तुलना में कम खुले बग हैं, जिनका आप उल्लेख करते हैं। सोचें कि आप यह भी पाएंगे कि DataNucleus विकास अन्य सॉफ्टवेयरों की तुलना में तेज गति से बग की संख्या को कम कर रहा है।
डेटान्यूक्लियस

1

मैंने मई 2012 में JDO 3.0 और DataNucleus 3.0 का उपयोग करने वाला एक नमूना WebApp बनाया - एक नज़र डालें कि यह कितना साफ है: https://github.com/TorbenVesterager/BadAssWebApp

ठीक है, शायद यह थोड़ा साफ है, क्योंकि मैं डेटाबेस और JSON क्लाइंट दोनों के लिए POJOs का उपयोग करता हूं, लेकिन यह मजेदार है :)

पुनश्च: इसमें कुछ सप्रेसवर्जन एनोटेशन शामिल हैं (इन्टेलीजे 11 में विकसित)

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