2009-09-05 13 views
93

जेपीए में @Column और @Basic एनोटेशन के बीच क्या अंतर है? क्या वे एक साथ इस्तेमाल किया जा सकता है? उन्हें एक साथ इस्तेमाल किया जाना चाहिए? या उनमें से एक पर्याप्त है?जावा पर्सिस्टेंस/जेपीए: @ कॉलम बनाम @ बासिक

उत्तर

126
  • @Basic का प्रतीक है कि एक विशेषता कायम किया जा रहा है और एक मानक मानचित्रण इस्तेमाल किया जा रहा है। इसमें पैरामीटर हैं जो आपको यह निर्दिष्ट करने की अनुमति देते हैं कि विशेषता आलसी लोड होनी चाहिए और क्या यह शून्य है।

  • @Column आपको डेटाबेस में कॉलम का नाम निर्दिष्ट करने की अनुमति देता है जिस पर विशेषता जारी रहनी है।

आप दूसरे के बिना एक निर्दिष्ट करते हैं तो आप डिफ़ॉल्ट व्यवहार जो समझदार है मिलता है, तो आमतौर पर लोगों को विशेष मामलों को छोड़कर केवल एक का उपयोग करें।

तो अगर हम एक विशेषता की एक आलसी लोड हो रहा है चाहता था और एक स्तंभ नाम निर्दिष्ट करने के हम कह सकते हैं

@Basic(fetch=FetchType.LAZY) 
@Column(name="WIBBLE") 

हम तो डिफ़ॉल्ट, गैर आलसी व्यवहार neeed हैं, बस @Column पर्याप्त हो गया होता।

+1

यह एक स्पष्ट उत्तर है। धन्यवाद। तो मुझे लगता है कि कोई '@ बेसिक' का उपयोग '@ कॉलम 'के बिना कर सकता है, यही कारण है कि' वैकल्पिक 'और' शून्य 'गुण दोनों में मौजूद हैं। क्या मैं सही हू? –

+0

मैं @ बेसिक के नामुमकिन और @ कॉलम के नामुमकिन और न तो या तो दोनों को निर्दिष्ट करने के प्रभाव पर जेपीए स्पेक को पूरी तरह से समझने का दावा नहीं करता हूं। @ बेसिक नालीबल को स्कीमा पीढ़ी के रिलीज के साथ "संकेत" के रूप में वर्णित किया गया है। @ कॉलम nullable डेटाबेस में कॉलम की विशेषताओं को परिभाषित करने के रूप में वर्णित है। मेरा अभ्यास @ कॉलम केस का उपयोग करना होगा। – djna

+15

@ बासिक (वैकल्पिक) डीबी को बचाने से पहले दृढ़ता प्रदाता द्वारा रनटाइम पर चेक किया जाना चाहिए (होना चाहिए)।@ कॉलम डेटाबेस में एक कॉलम परिभाषा है और इसका उपयोग स्कीमा पीढ़ी के लिए किया जाता है: http://stackoverflow.com/questions/2899073/basicoptional-false-vs-columnnullable-false-in-jpa –

42

@ डीजेना के उत्तर के अतिरिक्त, यह ध्यान देने योग्य है कि @Basic@OneToMany, @ManyToOne और @ManyToMany के साथ तुलना की जानी चाहिए। इनमें से केवल एक ही संपत्ति पर निर्दिष्ट किया जा सकता है। डेटाबेस कॉलम गुणों का वर्णन करने के लिए @Column और @JoinColumn इनमें से किसी के साथ निर्दिष्ट किया जा सकता है। ये एनोटेशन के दो सेट हैं जिनका उपयोग एक साथ किया जा सकता है, लेकिन एक समय में प्रत्येक सेट का केवल एक एनोटेशन इस्तेमाल किया जा सकता है।

19

यह ध्यान देने योग्य है कि बुनियादी आदिम क्षेत्रों

http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes

एक बुनियादी विशेषता एक जहाँ विशेषता वर्ग जैसे स्ट्रिंग, संख्या, दिनांक या एक आदिम एक सरल प्रकार है है के लिए डिज़ाइन किया गया है लायक है। एक मूल विशेषता का मान सीधे डेटाबेस में कॉलम मान पर मैप कर सकता है।

समर्थित प्रकार और रूपांतरण जेपीए कार्यान्वयन और डेटाबेस प्लेटफ़ॉर्म पर निर्भर करते हैं। किसी प्रकार का उपयोग करने वाली कोई मूल विशेषता जो किसी डेटाबेस प्रकार पर सीधे मैप नहीं करती है उसे बाइनरी डेटाबेस प्रकार में क्रमबद्ध किया जा सकता है।

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

+0

अच्छा नोट। धन्यवाद। –

+0

तो इसका मतलब यह नहीं है कि आपको गैर-प्राइमेटिव्स के लिए @ कॉलम निर्दिष्ट करना है, है ना? .. – Amalgovinus

+1

नहीं, यदि कोई कॉलम एनोटेशन निर्दिष्ट नहीं है, तो डिफ़ॉल्ट मान लागू होते हैं (नाम एक विशेषता होगी)। – Gab

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