मेरे पास @Entity
के साथ एनोटेटेड एक इकाई है।
अगर मैं CREATE TABLE
स्क्रिप्ट बनाने के लिए जिम्मेदार हूँ कारण है कि मैं @Column(nullable = false)
जब मैं NOT NULL
खोजशब्दों के साथ डेटाबेस में एक स्तंभ बना सकते हैं निर्दिष्ट करना चाहिए? क्या कोई ऐसा उदाहरण है जो इस संपत्ति का उपयोग किसी क्षेत्र में करने के लाभ दिखाता है?मुझे @ कॉलम (nullable = false) क्यों निर्दिष्ट करना चाहिए?
उत्तर
बेहतर त्रुटि संदेश और त्रुटि प्रबंधन, विशेष रूप से यदि आप JSR303 @NotNull annotation भी जोड़ते हैं।
आप NOT NULL
के रूप में स्तंभ बनाने लेकिन जेपीए नहीं बताया यह शून्य नहीं है, तो जेपीए कि शून्य मान ठीक हैं ग्रहण करेगा। जब आप ऑब्जेक्ट को नल के साथ सहेजने का प्रयास करते हैं, तो यह डीबी को भेजने के लिए आगे बढ़ेगा और आपको डीबी स्तर की त्रुटि मिल जाएगी। इससे डेटाबेस में लॉग स्पैम बढ़ जाता है और यह त्रुटि से निर्धारित करना बहुत कठिन होता है कि किस तालिका (कॉल) की कॉलम समस्या थी, उन्हें अकेले उन्हें अपने जेपीए नामों पर मानचित्रित करने दें।
आप उन्हें रिक्त नहीं के रूप में व्याख्या करते हैं, तो जेपीए, सहेजने से पहले एक अपवाद फेंक होगा डीबी लॉग स्पैम से बचने और आम तौर पर आप एक बेहतर त्रुटि है। विशेष रूप से, अपने जेपीए प्रदाता JSR303 समर्थन करता है तो और या तो आंतरिक रूप से @NotNull
में nullable=false
तब्दील हो या आप @NotNull
भी जोड़ दिया है, तो यह आपको एक डेटा संरचना आप को देखने के लिए वास्तव में क्या क्या वस्तुओं के क्षेत्र क्या कारणों से निरस्त कर दिया गया जांच कर सकते हैं दे देंगे, साथ अनुकूलन टेम्पलेट त्रुटि संदेशों के साथ।
इसलिए आप जेपीए NOT NULL
के बारे में खेतों में बताना चाहिए। यह, और आपके कोड पर काम करने वाले अन्य लोगों के लिए डीबी स्कीमा को पढ़ने के बिना समझना आसान है।
आपके मामले में वहाँ वास्तविक लाभ नहीं हो सकता है, लेकिन:
- अगर आप अपने जेपीए प्रदाता का उपयोग कर रहे है (या तो Maven के माध्यम से या hbm2ddl.auto की तरह स्वत: उत्पन्न होने के माध्यम से) अपने स्कीमा उत्पन्न करने के लिए, तो यह मायने रखती है
- यदि आप इकाई मॉडल के खिलाफ स्कीमा को सत्यापित करने के लिए अपने जेपीए प्रदाता को कॉन्फ़िगर करते हैं, तो आपको उन्हें सिंक में रहने की आवश्यकता है।
पहली धारणा को अनदेखा किया जा सकता है क्योंकि 'hbm2ddl.auto' उत्पादन के लिए नहीं है और मैं अपने प्रोजेक्ट का परीक्षण मैवेन और एक प्रबंधित जेबॉस उदाहरण के साथ आर्किलियन के साथ कर रहा हूं। दूसरी बात के बारे में यह केवल मेरी स्कीमा को मान्य करने के लिए उपयोगी होगा? इस मामले में मेरा मानना है कि यह जो वर्बोजिटी लाता है वह इसके लायक नहीं है, जब तक कि उनसे बेहतर कारण न हो। –
आपके इकाई मॉडल और सिंक में डीबी स्कीमा होने के साथ महत्वपूर्ण है। आप अब इसका उपयोग नहीं कर सकते हैं, लेकिन बाद में आप उन टूल को जोड़ सकते हैं जिन्हें इसकी आवश्यकता है। संबंधित http://techblog.bozho.net/?p=1100 – Bozho
साथ ही, यदि आपके स्तंभ nullable = false
में @ManyToOne
एनोटेशन है, हाइबरनेट अंदरूनी संबंधित मेज पर क्वेरी में शामिल होता है। nullable = true
परिणाम बाएं जॉइन में देता है।
यह अन्य अंतर है।
वाह, यह कुछ अंतर्दृष्टि है। धन्यवाद। – HopeKing
- 1. @ManyToOne (वैकल्पिक = झूठा) बनाम @ कॉलम (nullable = false)
- 2. PHP: memory_get_peak_usage (false), मुझे कब सही उपयोग करना चाहिए?
- 3. मुझे स्पष्ट रूप से स्ट्रक्चरआउट निर्दिष्ट करना चाहिए?
- 4. मुझे फ्लेक्स का उपयोग क्यों करना चाहिए?
- 5. मुझे एमएक्सएमएल का उपयोग क्यों करना चाहिए?
- 6. मुझे ईएमएफ का उपयोग क्यों करना चाहिए?
- 7. मुझे गिटिनोरोर का उपयोग क्यों करना चाहिए?
- 8. नाइटली बिल्ड: मुझे ऐसा क्यों करना चाहिए?
- 9. मुझे डिस्पैचर का उपयोग क्यों करना चाहिए?
- 10. मुझे सॉकेट.ओ का उपयोग क्यों करना चाहिए?
- 11. मुझे डोलॉल्स का उपयोग क्यों करना चाहिए?
- 12. मुझे मैन्युअल डबल बफरिंग क्यों करना चाहिए?
- 13. मुझे glbindAttribLocation का उपयोग क्यों करना चाहिए?
- 14. मुझे * * * GetHashCode() को ओवरराइड क्यों करना चाहिए?
- 15. मुझे @properties का उपयोग क्यों करना चाहिए?
- 16. क्या मुझे अपने जेमफाइल में सटीक संस्करण निर्दिष्ट करना चाहिए?
- 17. @OneToOne (वैकल्पिक = झूठा) और @JoinColumn (nullable = false) एक साथ
- 18. मुझे वर्तमान संस्कृति या InvariantCulture कब निर्दिष्ट करना चाहिए और मुझे इसे कब निर्दिष्ट नहीं किया जाना चाहिए?
- 19. मुझे क्या करना चाहिए?
- 20. कई बिट्स संग्रहीत करना - क्या मुझे एकाधिक कॉलम या एक बिटफील्ड कॉलम का उपयोग करना चाहिए?
- 21. कहें फ़ंक्शन का उपयोग करते समय मुझे उपयोग कथन क्यों निर्दिष्ट करना चाहिए?
- 22. विंडोज 8 ऐप: मुझे अपने छवि स्रोत यूआरएल में एमएस-एपएक्स: /// क्यों निर्दिष्ट करना चाहिए?
- 23. postgresql: मुझे psql चलाने पर स्थानीयहोस्ट निर्दिष्ट क्यों करना है?
- 24. मुझे std :: get_temporary_buffer क्यों चाहिए?
- 25. क्या मुझे सी फ़ंक्शन से TRUE/FALSE मान वापस करना चाहिए?
- 26. अगर मुझे क्लोनेबल क्लास चाहिए तो मुझे क्लोन ओवरराइड क्यों करना चाहिए?
- 27. मुझे COM क्यों सीखना चाहिए?
- 28. मुझे एक एपीआई चाहिए। मुझे कहां से शुरू करना चाहिए?
- 29. मुझे कितना अनुकूलित करना चाहिए?
- 30. $ false -eq सत्य क्यों है?
ठीक है, लेकिन यह आपके उत्तर में अस्पष्ट है कि क्या आपको लगता है कि @NotNull और @Column (nullable = false) दोनों में एक अतिरिक्त मूल्य है। तुम क्या सोचते हो? – ymajoros
@ymajoros इस बात पर निर्भर करता है कि आपका JSR303/JPA एकीकरण कितना स्मार्ट है। मैं दोनों को डालता हूं लेकिन एक अच्छा जेपीए जेएसआर 303 एकीकरण कॉलम के लिए एक अंतर्निहित नोटन जोड़ देगा जो शून्य नहीं है = झूठा –
क्या उन्हें चाहिए? यदि यह कल्पना का हिस्सा नहीं है, तो मुझे नहीं पता कि क्यों और किस संदर्भ में। मैं बजाय @NotNull होगा लेकिन कोई शून्य नहीं = झूठा, क्योंकि उत्तरार्द्ध केवल jpa है। मेरा प्रश्न @ कॉलम (शून्य = झूठा) के अतिरिक्त मूल्य के बारे में अधिक है। – ymajoros