2013-02-15 112 views
8

इस वर्ग जेपीए (जेपीए 1.0 और हाइबरनेट का प्रयोग करके) के साथ मैप किया गया को देखते हुए:जेपीए मैपिंग में आदिम प्रकार। क्या होगा यदि डेटाबेस कॉलम न्यूल हो सकता है?

@Entity 
public class Foo { 

    private int bar; 

    /* ... */ 
} 
  1. अगर मैं एक रिकॉर्ड है जो BAR स्तंभ शून्य पर सेट है लोड करने का प्रयास क्या होता है?
  2. क्या मैं निर्दिष्ट कर सकता हूं कि संबंधित कॉलम न्यूल होने पर bar फ़ील्ड कैसे सेट करें?

नोट्स

मैं जानता हूँ कि यह एक सबसे अच्छा अभ्यास नहीं है। प्रश्न जिज्ञासा से बाहर अधिक है और यह इस स्थिति से प्रेरित है:

  • डेटाबेस तालिका एक मचान तालिका है: एक NOT NULL बाधा जोड़ने अव्यावहारिक है। खराब डेटा की उम्मीद है, और मेरे कोड का बिंदु "वास्तविक" डेटाबेस में लोड करने से पहले डेटा को सत्यापित, साफ और/या अस्वीकार करना है।
  • मेरे पास कुछ फ़ील्ड के लिए स्वीकार्य डिफ़ॉल्ट मान हैं। उदाहरण के लिए, boolean ध्वज जो false पर डिफ़ॉल्ट होना चाहिए।
+3

यदि डीबी कॉलम में शून्य हो सकती है तो आपको मूल्य का प्रतिनिधित्व करने के लिए वास्तव में एक रैपर वर्ग का उपयोग करना चाहिए। – Perception

उत्तर

2
  1. अपवाद

2.

@Column(name = “bar”, nullable = false, columnDefinition = “bigint(20) default 0″) 
private int bar; 

यह आपकी समस्या नहीं सुलझती।

+0

लेकिन बिंदु 2 के साथ मुझे डेटाबेस कॉलम परिभाषा को बदलने की ज़रूरत है, है ना? –

+0

मैं मानता हूं कि यदि आप वास्तव में एक नल प्रतिनिधित्व चाहते हैं तो आपको बस इंटीजर में बार बदलना चाहिए। लेकिन अगर आप शून्य से बचना चाहते हैं, तो आप एक डिफ़ॉल्ट मान निर्धारित कर सकते हैं। – Matheus

+0

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

11

यदि कॉलम में शून्य मान हो तो मैं ऑब्जेक्ट्स का उपयोग करूंगा क्योंकि मैथ्यूस का विचार गलत डेटा पेश करता है। NULL <> 0!

+0

क्या आप कृपया बता सकते हैं कि यहां झूठे डेटा से आपका क्या मतलब है। मैथ्यूस डिफ़ॉल्ट को 0 और nullable = false पर सेट कर रहा है, इसलिए यह कभी शून्य नहीं होगा। बुरा/झूठा डेटा से आपका क्या मतलब है? – Ankit

+2

'कॉलमडिफिनिशन' का उपयोग केवल * डीडीएल पीढ़ी के लिए किया जाता है (यानी टेबल बनाने और बदलने के लिए बयान उत्पन्न करना), इसलिए डिफ़ॉल्ट मान आदिम का डिफ़ॉल्ट मान होगा। वास्तव में, जब आप जेपीए का उपयोग करते हैं तो आपको डिफ़ॉल्ट मानों के साथ कॉलम नहीं बनाना चाहिए। यदि आपका क्षेत्र एक आदिम है, तो यह मूल प्रकार के डिफ़ॉल्ट मान के लिए डिफ़ॉल्ट होगा। यदि आपका क्षेत्र एक ऑब्जेक्ट है, तो डेटाबेस आपकी तालिका में परिभाषित डिफ़ॉल्ट मान सेट करेगा, लेकिन डाले गए इकाई ऑब्जेक्ट में कॉलम का समकक्ष डिफ़ॉल्ट मान को दर्शाने के लिए अपडेट नहीं किया जाएगा। –