Java Persistence / JPA: @ कॉलम पूर्व बनाम @ बासिक


119

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

जवाबों:


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

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

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

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

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

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


2
यह एक स्पष्ट जवाब है। धन्यवाद। इसलिए मुझे लगता है कि कोई भी इसके @Basicबिना उपयोग कर सकता है @Column, यही कारण है कि दोनों में गुण optionalऔर nullableगुण मौजूद हैं। क्या मैं सही हू?
होसम एली

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

16
@Basic (वैकल्पिक) DB को बचाने से पहले दृढ़ता प्रदाता द्वारा रनटाइम पर जाँच की जानी चाहिए (होनी चाहिए)। @ कॉलम डेटाबेस में एक कॉलम परिभाषा है और इसे स्कीमा पीढ़ी के लिए उपयोग किया जाता है: stackoverflow.com/questions/2899073/…
Piotr Gwiazda

2
वह 'गैर-आलसी', EAGER कहता है। LOL
सॉल्वेटर

7
जेपीए एनोटेशन को दो समूहों में विभाजित किया जा सकता है: शुद्ध रिलेशनल एनोटेशन बनाम कार्यान्वयन एनोटेशन। शुद्ध संबंधपरक एनोटेशन में शामिल हैं: एंटिटी, बेसिक, OneToOne, OneToMany, ManyToMany, ... जबकि कार्यान्वयन एनोटेशन इस बात का सुराग देते हैं कि शुद्ध सैद्धांतिक मॉडल को एक वास्तविक डेटाबेस में कैसे मैप किया जाए: टेबल, कॉलम, ... आपके प्रश्न में 'बेसिक 'संबंध इकाई के बारे में जानकारी प्रदान करने के लिए एक एनोटेशन है, जबकि' कॉलम 'डेटाबेस कॉलम में इसे कैसे मैप करता है, इसकी जानकारी प्रदान करता है।
ब्रूनो रैन्शर्ट

50

@ Djna के जवाब के अलावा , यह ध्यान देने योग्य है कि @Basicइसकी तुलना की जानी चाहिए @OneToMany, @ManyToOneऔर @ManyToMany। इनमें से किसी भी संपत्ति पर केवल एक निर्दिष्ट किया जा सकता है।

@Columnऔर @JoinColumnडेटाबेस स्तंभ गुणों का वर्णन करने के लिए इनमें से किसी के साथ निर्दिष्ट किया जा सकता है।

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


21

यह ध्यान देने योग्य है कि बेसिक को आदिम क्षेत्रों के लिए डिज़ाइन किया गया है

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

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

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

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


अच्छी बात है। धन्यवाद।
होसम ऐली

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

2

@Basic एनोटेशन JPA संस्थाओं पर लागू किया जाता है, और @ कॉलम को डेटाबेस कॉलम पर लागू किया जाता है @Basic एनोटेशन का वैकल्पिक गुण परिभाषित करता है कि इकाई फ़ील्ड शून्य हो सकती है या नहीं; दूसरी ओर,

  • @ कॉलम एनोटेशन की अशक्त विशेषता निर्दिष्ट करती है कि क्या संबंधित डेटाबेस कॉलम शून्य हो सकता है
  • हम यह इंगित करने के लिए @Basic का उपयोग कर सकते हैं कि किसी फ़ील्ड को आलसी लोड किया जाना चाहिए
  • @ कॉलम एनोटेशन हमें मैप किए गए डेटाबेस कॉलम का नाम निर्दिष्ट करने की अनुमति देता है
  • @Basic एनोटेशन जावा ऑब्जेक्ट स्तर पर वैकल्पिक नहीं के रूप में संपत्ति को चिह्नित करता है। और स्तम्भ मानचित्रण पर (अशक्त = गलत), केवल NULL डेटाबेस बाधा की पीढ़ी के लिए जिम्मेदार नहीं है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.