2010-02-25 11 views
15

सक्षम वैरिएबल को बूलियन या बूलियन के रूप में घोषित करने में कोई अंतर है? जो स्मृति पदचिह्न परिप्रेक्ष्य से बेहतर है।इकाई सदस्यों को वे प्राचीन डेटा प्रकार या जावा डेटा प्रकार होना चाहिए?

@Entity 
class User { 

    @Column 
    Boolean enabled; 
} 

उत्तर

12

वे दोनों एक ही कॉलम प्रकार पर मानचित्र होंगे। एक स्मृति परिप्रेक्ष्य से, एक आदिम शायद थोड़ा हल्का होगा, लेकिन अंतर लगभग निश्चित रूप से नगण्य होने जा रहा है। मुझे लगता है कि एक आदिम इसे गैर-शून्य बना देगा, लेकिन आप इसे एनोटेशन के साथ भी कर सकते हैं।

+0

धन्यवाद, मैं जावा डेटा प्रकार के साथ रहूंगा ताकि नल के विशेष संचालन से बच सकें – Sam

9

कालेब का अधिकार - यदि कोई प्रश्न "सक्षम" (इस मामले में) के लिए शून्य मान देता है तो आपको आदिम के बजाय ऑब्जेक्ट का उपयोग करना होगा।

यह हाइबरनेट पूछे जाने वाले प्रश्न से है:

एक PropertyAccessException अक्सर तब होता है जब वस्तु सेटर विधि को भेजी जा रही गलत प्रकार का है। आपत्तिजनक संपत्ति के लिए अपने प्रकार के मैपिंग की जांच करें। (यह देखने के लिए कि वास्तव में कौन सी संपत्ति समस्या थी, आपको CGLIB प्रतिबिंब अनुकूलक को अक्षम करने की आवश्यकता हो सकती है।) हालांकि, इस समस्या का सबसे आम कारण यह है कि हाइबरनेट ने आदिम प्रकार की संपत्ति को शून्य करने का प्रयास किया।

यदि आपके ऑब्जेक्ट में एक मूलभूत प्रकार की संपत्ति है जो एक शून्य डेटाबेस डेटाबेस कॉलम में मैप की गई है तो आपको शून्य कॉलम मान के मामले के लिए एक समझदार डिफ़ॉल्ट (आदिम) मान असाइन करने के लिए एक हाइबरनेट कस्टम प्रकार का उपयोग करने की आवश्यकता होगी। जावा प्रॉपर्टी के लिए आमतौर पर एक रैपर प्रकार का उपयोग करने के लिए एक बेहतर समाधान होता है।

https://www.hibernate.org/116.html

20

मैं आमतौर पर आदिम प्रकार का उपयोग कर सुझाव है, बस हर जगह अशक्त चेकों से छुटकारा पाने के। लेकिन यह वास्तव में उस पर निर्भर करता है कि आप क्या कहना चाहते हैं। आपका बूलियन अब 3 मान हो सकते हैं:

  1. सच
  2. झूठी
  3. अशक्त

और अशक्त कुल नया अर्थ कर सकते हैं जब संस्थाओं के साथ काम कर। मैं आमतौर पर इसे "कोई डेटा उपलब्ध नहीं" के रूप में उपयोग करता हूं। इस तरह के क्षेत्र के लिए आपका "सक्षम" एक बुरा उदाहरण हो सकता है। लेकिन मान लें कि आपके पास एक संख्या है जिसमें किसी व्यक्ति की उम्र होती है।

private Integer age; 

जब आप शून्य का उपयोग करते हैं, तो आप इसे "अज्ञात" के रूप में देख सकते हैं। आप एक इंट का भी उपयोग कर सकते हैं और इस मामले के लिए एक विशेष मूल्य (-1) परिभाषित कर सकते हैं, लेकिन शून्य अधिक प्राकृतिक समाधान है।

तो, इसे समेटने के लिए। यदि वैकल्पिक मूल्यों के लिए हमेशा सार्थक मूल्य (आवश्यक फ़ील्ड?) और रैपर कक्षाएं होती हैं तो प्राइमेटिव का उपयोग करें।

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