2016-02-11 4 views
5

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

क्यों यह इतना है?

उत्तर

1

मैं इस

2.2.1 के लिए दस्तावेज़ बोली होगी। लगातार इकाई के रूप में एक POJO

हर लगातार POJO वर्ग एक इकाई है और (श्रेणी स्तर पर) @Entity एनोटेशन का उपयोग कर घोषित किया जाता है अंकन:

@Entity सार्वजनिक वर्ग की उड़ान को लागू करता है Serializable { लांग आईडी;

@Id 
public Long getId() { return id; } 

public void setId(Long id) { this.id = id; } }   

@Entity एक इकाई के रूप वर्ग (अर्थात एक लगातार POJO वर्ग) वाणी, @Id इस इकाई के पहचानकर्ता संपत्ति की घोषणा की। अन्य मैपिंग घोषणाएं अंतर्निहित हैं। क्लास फ्लाइट को फ्लाइट टेबल पर मैप किया गया है, कॉलम आईडी का उपयोग इसके प्राथमिक कुंजी कॉलम के रूप में किया जाता है। नोट

अपवाद द्वारा विन्यास की अवधारणा जेपीए विनिर्देश लिए केंद्रीय है।

चाहे आप फ़ील्ड या विधियों को एनोटेट करते हैं, इस पर निर्भर करता है कि हाइबरनेट द्वारा उपयोग किए जाने वाले एक्सेस प्रकार फ़ील्ड या प्रॉपर्टी होंगे। EJB3 कल्पना आवश्यकता है कि आप तत्व प्रकार पर एनोटेशन कि जा पहुँचा होगा की घोषणा है, यानी गेटर विधि यदि आप संपत्ति का उपयोग का उपयोग करें, क्षेत्र यदि आप क्षेत्र पहुँच का उपयोग करें। दोनों क्षेत्रों और विधियों में एनोटेशन मिक्सिंग से बचा जाना चाहिए। हाइबरनेट @Id या @EmbeddedId की स्थिति से एक्सेस प्रकार लगता है कि होगा।

जेपीए उर्फ ​​जावा पर्सिस्टेंस एपीआई नामक कुछ है। हाइबरनेट अपने कार्यान्वयन में दिशानिर्देशों का पालन करता है। इस प्रकार यह सुनिश्चित करने के लिए कि यह JVM द्वारा सही ढंग से पहचाना जाता है (साथ ही साथ इकाई के रूप में मैप किया जाता है)

जेपीए में दृढ़ता प्रबंधन सेटअप में @Entity के साथ एनोटेटेड कोई भी वर्ग शामिल होगा। यदि आप एनोटेशन का उपयोग करते हैं तो आपको persistence.xml की आवश्यकता नहीं है। यह अन्य जेपीए कार्यान्वयन के साथ-साथ ओपन-जेपीए

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

+0

_Thus यह सुनिश्चित करने के लिए कि यह JVM_ द्वारा सही ढंग से पहचाना जाता है - अजीब लगता है :) –

+0

शायद आप इसे सही कर सकते हैं। मेरी समझ है कि कोई एनोटेशन जेवीएम या कंपाइलर के लिए मेटा डेटा है। – Acewin

+0

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

2

@Entity एक जेपीए एनोटेशन है। JPA specification से, खंड 2.1:

इकाई वर्ग इकाई एनोटेशन या एक इकाई के रूप एक्सएमएल वर्णनकर्ता को सूचित करता है के साथ एनोटेट किया जाना चाहिए।

इसलिए, यदि आप मैपिंग के लिए एनोटेशन का उपयोग, @Entity विनिर्देश द्वारा सौंपा जाता है और हाइबरनेट यह पालन करने के लिए है।

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

1

वास्तव में आपको सख्ती से एनोटेशन की आवश्यकता नहीं है। हाइबरनेट इसकी .xml कॉन्फ़िगरेशन का एक स्रोत होने की अनुमति देता है। लेकिन अगर आप एनोटेशन का उपयोग करना चुनते हैं - जाहिर है आपको अपने मॉडल क्लास पर @Entity की आवश्यकता होगी।

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

+0

और यह इसके विपरीत है। यदि आप एनोटेशन का उपयोग करते हैं तो आपको दृढ़ता xml में इकाई जोड़ने की आवश्यकता नहीं है। – Acewin

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