2014-10-28 29 views
9

में @ एंटीटी के बीच क्या अंतर है जब मैं नमूना हाइबरनेट स्टैंडअलोन प्रोग्राम कर रहा हूं, तो मेरे दिमाग में @ एंटीटी एनोटेशन के उपयोग के साथ थोड़ा उलझन में बनाया गया था।हाइबरनेट और जेपीए

यहाँ मेरे सवाल है, मैं javax.persistence पैकेज से @Entity के साथ एक मौजूदा वर्ग है तो यह ठीक काम कर रहा है, लेकिन जब मैं हाइबरनेट एपीआई के साथ @Entity एनोटेशन प्रतिस्थापित (org.hibernate.annotations पैकेज से यानी) तो यह दे रहा है org.hibernate.MappingException: अज्ञात इकाई: com.jetti.test.Employee

कुछ और स्पष्टीकरण की अत्यधिक सराहना की जाती है।

+2

यह एसओ पोस्ट दो एनोटेशन के बीच अंतर बताता है और क्यों आपका मैपिंग नहीं मिला: http://stackoverflow.com/questions/955515/difference-between-jpa-entity-and-hibernate-entity –

+0

और हाइबरनेट इकाई बहिष्कृत है इसलिए आपको इसका उपयोग नहीं करना चाहिए FWIW; –

उत्तर

5

@ javax.persistence.Entity अभी भी अनिवार्य है, @ org.hibernate.annotations.Entity एक प्रतिस्थापन नहीं है।

Documentation

तो, हाइबरनेट के @Entity सिर्फ javax.persistence.Entity पूरक है, और कुछ और ट्यूनिंग विकल्प देता है।

+0

का उपयोग करने के बजाय javadocs देखें मैंने सोचा कि हाइबरनेट नीचे जेपीए का उपयोग करता है? – ha9u63ar

+2

@ हगबियर जेपीए एक विनिर्देश है, और हाइबरनेट (कई अन्य ढांचे के रूप में) उस विनिर्देश को लागू करता है। उद्धरण [यह] (http://en.wikibooks.org/wiki/Java_Persistence/What_is_JPA%3F) 'जेपीए स्वयं ही एक विनिर्देश है, उत्पाद नहीं; यह दृढ़ता या कुछ और नहीं कर सकता है। जेपीए सिर्फ इंटरफेस का एक सेट है, और एक कार्यान्वयन की आवश्यकता है। इस प्रश्न के संदर्भ में, इसका मतलब है कि हाइबरनेट 'javax.persistence.Entity' के लिए समर्थन लागू करता है, लेकिन 'org.hibernate.annotations.Entity' के साथ और अधिक क्षमताओं को जोड़ता है। –

4

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

आप जेपीए एनोटेशन के साथ अपनी कक्षाएं एनोटेट कर सकते हैं, लेकिन कार्यान्वयन के बिना कुछ भी नहीं होगा।

एक संक्षिप्त तरीके से आप दिशानिर्देशों के रूप में "जेपीए" पर विचार कर सकते हैं।

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

मुझे आशा है कि यह सहायक होगा।


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

हाइबरनेट एक जेपीए प्रदाता है। जब विनिर्देश में नए बदलाव होते हैं, तो हाइबरनेट जेपीए विनिर्देश के लिए अपने अद्यतन कार्यान्वयन को जारी करेगा। अन्य लोकप्रिय जेपीए प्रदाता ग्रहण लिंक (संदर्भ कार्यान्वयन), ओपनजेपीए आदि हैं।See Other provider here

@javax.persistence.Entity एक प्रदाता है कि जेपीए दिशानिर्देश

@org.hibernate.annotations.Entity लागू करता है के लिए एक दिशानिर्देश के एक हाइबरनेट ORM

के लिए क्रियान्वयन की है इसके अलावा आप कर सकते हैं see this other topic

+0

आपके उत्तर पर स्पष्ट दृश्य नहीं मिल रहा है, क्या आप कृपया इस पर विस्तार कर सकते हैं - @Xstian – jettisamba

2

org.hibernate.annotations.Entity एनोटेशन हटा दिया गया है और इसके लिए निर्धारित है हटाना:

@ डेप्रेक्ट ed इच्छित प्रतिस्थापन के लिए अलग-अलग विशेषताओं को देखें। 4,1

में निकाले जाने के लिए हर विशेषता एक समर्पित एनोटेशन (जैसे DynamicInsert, DynamicUpdate) है और ताकि आप हमेशा javax.persistence.Entity विकल्प पर मुकदमा करना चाहिए।

संबंधित मुद्दे