बीच क्या अंतर है @Basic(optional = false)और @Column(nullable = false)जेपीए हठ में?
बीच क्या अंतर है @Basic(optional = false)और @Column(nullable = false)जेपीए हठ में?
जवाबों:
गॉर्डन यॉर्के (एक्लिप्स आर्किटेक्चर कमेटी मेंबर, टॉपलिंक कोर टेक्निकल लीड, जेपीए 2.0 एक्सपर्ट ग्रुप मेंबर) ने इस विषय पर एक अच्छा उत्तर लिखा है, इसलिए उसे पैराफ्रेस करने के बजाय, मैं उसका उत्तर उद्धृत करूंगा :
के बीच का अंतर
optionalऔरnullableवह दायरा है जिस पर उनका मूल्यांकन किया जाता है।optionalसंपत्ति और क्षेत्र के मूल्यों के बारे में ' ' की परिभाषा बताती है और सुझाव देती है कि इस सुविधा का मूल्यांकन रनटाइम के भीतर किया जाना चाहिए। 'nullable' केवल डेटाबेस कॉलम के संदर्भ में है।यदि कोई कार्यान्वयन लागू करना चुनता है,
optionalतो उन संपत्तियों को पर्सिस्टेंस प्रदाता द्वारा मेमोरी में मूल्यांकन किया जाना चाहिए और SQL से पहले उठाए गए एक अपवाद को डेटाबेस में भेज दिया जाता है अन्यथा 'updatable=false' 'optional' उल्लंघनों का उपयोग करते समय कभी भी रिपोर्ट नहीं की जाएगी।
@Basic(optional = false) @Column(nullable = false)@Basic एनोटेशन संपत्ति को जावा ऑब्जेक्ट स्तर पर वैकल्पिक नहीं के रूप में चिह्नित करता है। कॉलम मैपिंग पर दूसरी सेटिंग, nullable = false, केवल एक NOT NULL डेटाबेस बाधा उत्पन्न करने के लिए जिम्मेदार है। हाइबरनेट जेपीए कार्यान्वयन किसी भी मामले में दोनों विकल्पों को एक ही तरह से व्यवहार करता है, इसलिए आप इस उद्देश्य के लिए केवल एक एनोटेशन का उपयोग कर सकते हैं।
The @Basic annotation marks the property as not optional on the Java object level.कि इसका क्या मतलब है? तो, केवल @Basicयह कहने जैसा है कि NOT NULLउक्त चर के लिए डेटाबेस कॉलम बनाएं ?
इसलिए मैंने JPA 2.1 (EclipseLink) का उपयोग करके @Basic (वैकल्पिक = गलत) एनोटेशन की कोशिश की और यह पता चला कि एनोटेशन को वास्तविक उपयोग (कम से कम एक स्ट्रिंग फ़ील्ड के लिए) में अनदेखा किया गया है। (उदा .ManManager.persist कॉल्स)।
इसलिए मैं विनिर्देश पर गया और इसके बारे में पढ़ा। यहाँ क्या कहना है कल्पना है:
http://download.oracle.com/otndocs/jcp/persistence-2.0-fr-oth-JSpec/
मूल (वैकल्पिक): चाहे क्षेत्र या संपत्ति का मूल्य शून्य हो सकता है। यह एक संकेत है और आदिम प्रकारों के लिए अवहेलना है; इसका उपयोग स्कीमा पीढ़ी में किया जा सकता है।
इसलिए मुझे लगता है कि यह वाक्य मूल (वैकल्पिक) के लिए वास्तविक उपयोग के मामले को समझाता है जो स्कीमा पीढ़ी में उपयोग किया जाता है। (वह यह है: जब आप जावा इकाई वर्गों से सृजन योग्य SQL उत्पन्न करते हैं। यह कुछ हाइबरनेट उदाहरण के लिए कर सकता है।)
optional = falseकेवल इस बाधा की जाँच करने के लिए है। nullable = falseडेटाबेस बाधा बनाता है। अनुप्रयोगों के लिए, यह भी optional = falseसमझ में आता है, क्योंकि यह डेटाबेस में जाने की तुलना में तेजी से मूल्यांकन किया जाता है और उस बाधा की जांच करता है ..