2010-05-24 8 views
85

जेपीए दृढ़ता में @Basic(optional = false) और @Column(nullable = false) के बीच क्या अंतर है?@ बेसिक (वैकल्पिक = झूठा) बनाम @ कॉलम (शून्य = झूठी) जेपीए

+1

डुप्लिकेट http://stackoverflow.com/questions/1383229/java-persistence-jpa-column-vs -बासिक – Schildmeijer

+13

वास्तव में एक डुप्लिकेट नहीं है, सवाल गुणों के बारे में अधिक है, एनोटेशन नहीं। –

उत्तर

81

गॉर्डन योर्क (EclipseLink वास्तुकला समिति के सदस्य, TopLink कोर तकनीकी नेता, जेपीए 2.0 विशेषज्ञ समूह सदस्य) उसे टीका की तो बजाय इस विषय पर एक अच्छा जवाब लिखा, मैं his answer बोली होगी:

अंतर optional और nullable के बीच वह दायरा है जिस पर वे का मूल्यांकन किया जाता है। 'optional' की परिभाषा संपत्ति और फ़ील्ड मानों के बारे में वार्ता और सुझाव देती है कि यह सुविधा रनटाइम के भीतर मूल्यांकन की जानी चाहिए। 'nullable' केवल डेटाबेस कॉलम के संदर्भ में है।

एक कार्यान्वयन तो optional लागू करने के लिए उन गुण हठ प्रदाता और एक अपवाद एसक्यूएल से पहले उठाया द्वारा स्मृति में मूल्यांकन किया जाना चाहिए अन्यथा डेटाबेस के लिए भेज दिया जाता है चुनता है जब 'updatable=false' 'optional' का उपयोग कर उल्लंघन की सूचना नहीं दी जाएगी।

+6

तो, जो वास्तव में इस्तेमाल किया जाना चाहिए, शायद दोनों? –

+32

@Xie Jilei: पुस्तक से: जावा दृढ़ता से हाइबरनेट 2007, पी। 17 9: '@ बेसिक (वैकल्पिक = झूठा) @ कॉलम (शून्य = झूठा)' @ बासिक एनोटेशन जावा ऑब्जेक्ट स्तर पर संपत्ति को वैकल्पिक नहीं है। कॉलम मैपिंग पर दूसरी सेटिंग, nullable = false, केवल नहीं है जो नल डेटाबेस डेटाबेस की पीढ़ी के लिए ज़िम्मेदार है। हाइबरनेट जेपीए कार्यान्वयन दोनों विकल्पों को किसी भी मामले में समान तरीके से व्यवहार करता है, इसलिए आप के रूप में अच्छी तरह से इस उद्देश्य के लिए एनोटेशन का उपयोग कर सकते हैं। – rapt

+2

@rapt - मुझे समझ में नहीं आता है कि @ बासिक एनोटेशन संपत्ति को जावा ऑब्जेक्ट स्तर पर वैकल्पिक नहीं है। इसका क्या अर्थ है? तो, केवल '@ बेसिक' कहने जैसा है कि कहा गया चर के लिए डेटाबेस कॉलम 'नॉट न्यूल' बनाओ? –

1

तो मैं @Basic (वैकल्पिक = false) एनोटेशन जेपीए 2.1 (EclipseLink) का उपयोग करने की कोशिश की और यह पता चला है एनोटेशन वास्तविक उपयोग में (कम से कम एक स्ट्रिंग फ़ील्ड के लिए) नजरअंदाज कर दिया है। (उदा। entityManager.persist कॉल)।

तो मैं विनिर्देशन में गया और इसके बारे में पढ़ा।
http://download.oracle.com/otndocs/jcp/persistence-2.0-fr-oth-JSpec/

बेसिक (वैकल्पिक):: क्षेत्र या संपत्ति के मूल्य अशक्त हो सकता है चाहे यहाँ कल्पना में क्या कहना है है। यह एक संकेत है और आदिम प्रकारों के लिए उपेक्षा है; इसका उपयोग स्कीमा पीढ़ी में किया जा सकता है।

तो मुझे लगता है कि यह वाक्य मूलभूत (वैकल्पिक) के वास्तविक उपयोग मामले को बताता है जिसका उपयोग स्कीमा पीढ़ी में किया जाता है। (यह है: जब आप जावा एंटिटी क्लासेस से क्रिएट टेबल एसक्यूएल जेनरेट करते हैं। उदाहरण के लिए हाइबरनेट कुछ ऐसा कर सकता है।)

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