मैंने स्प्रिंग देखा, जेपीए रिपॉजिटरी (डीएओ परत: अगर मैं गलत नहीं हूं) के आसपास काम करता हूं। तो मेरा मतलब है कि 'स्प्रिंग जेपीए + हाइबरनेट' का उपयोग करना अलग है या केवल सीधे 'हाइबरनेट' का उपयोग करना?
जैसा कि आपने कहा, जेपीए एक है विनिर्देश जबकि हाइबरनेट कि विनिर्देश की एक विशेष कार्यान्वयन है (इन कार्यान्वयन आमतौर पर के रूप में भेजा प्रदाता )। हाइबरनेट का उपयोग करके आप अपने आप को उस प्रदाता से बाँध लेते हैं जब आवश्यकता होने पर किसी अन्य विकल्प पर स्विच करने की आपकी स्वतंत्रता को प्रतिबंधित कर देता है (उदाहरण के लिए, आप इसके बजाय EclipseLink या ObjectDB का उपयोग करना चाहते हैं क्योंकि Hibernate में एक बग है जो आपकी विकास प्रक्रिया को रोक देता है)।
स्प्रिंग डेटा JPA के प्रलेखन का हवाला देते हुए :
किसी एप्लिकेशन के डेटा एक्सेस लेयर को लागू करना काफी समय से बोझिल है। बहुत अधिक बॉयलरप्लेट कोड लिखना पड़ा। डोमेन कक्षाएं एनीमिक थीं और उन्हें वास्तविक वस्तु उन्मुख या डोमेन संचालित तरीके से डिजाइन नहीं किया गया था।
इन दोनों तकनीकों का उपयोग करने से डेवलपर्स को समृद्ध डोमेन मॉडल की दृढ़ता के बारे में बहुत आसान हो जाता है। फिर भी रिपॉजिटरी को लागू करने के लिए बॉयलरप्लेट कोड की मात्रा, विशेष रूप से अभी भी काफी अधिक है। इसलिए स्प्रिंग डेटा के रिपॉजिटरी एब्स्ट्रैक्शन का लक्ष्य विभिन्न दृढ़ता वाले स्टोरों के लिए डेटा एक्सेस लेयर्स को महत्वपूर्ण रूप से लागू करने के प्रयास को कम करना है।
इसे योग करने के लिए, जेपीए के शीर्ष पर यह अमूर्तता की एक और परत जोड़ रहा है, एक वसंत संदर्भ में दृढ़ता परत का समर्थन करने के लिए एक मानक-आधारित डिज़ाइन को परिभाषित करने का प्रकार । उन परिभाषित इंटरफेस (स्प्रिंग के लिए जाने जाते हैं) उन सेवाओं को प्रदान करते हैं, जो परिणाम की सेवा के लिए जेपीए का उपयोग करके फ्रेमवर्क संभालती है। आप एक तरह से रिपॉजिटरी को परिभाषित करते हैं कि स्प्रिंग परियोजना को स्कैन कर सकता है और इसे पा सकता है:
<repositories base-package="com.acme.repositories" />
इस प्रकार, आप इसे कंटेनर या उसके बाहर के संदर्भ में उपयोग करने की अनुमति देते हैं।
अब वास्तव में स्प्रिंग, जेपीए क्या है। क्या स्प्रिंग, जेपीए ने जेपीए पर कुछ और कार्यक्षमता (इंटरफेसेस) जोड़ दी है और अभी भी यह केवल निर्दिष्ट है या यह भी एक जेपीए प्रदाता है?
स्प्रिंग डेटा JPA उन रिपॉजिटरी को लागू करने के लिए एक परिभाषा प्रदान करता है जो JPA विनिर्देश को संदर्भित करके हुड के तहत समर्थित हैं, जिस प्रदाता को आप परिभाषित करते हैं।