दिलचस्प पोस्ट
एक फ़ेविकॉन बनाना मैं ओपनसीवी में सबसे बड़ा इंटीरियर बाउंडिंग बॉक्स कैसे फसल कर सकता हूँ? Std :: tuple to std :: सरणी सी ++ 11 कन्वर्ट थ्रेडिंग पूल मल्टी प्रोकक्शन पूल के समान है? मैं एक सीएसवी फ़ाइल में शब्दकोशों की इस सूची को कैसे परिवर्तित कर सकता हूं? एएसपी.नेट अनुप्रयोग तक पहुंचने वाले मौजूदा उपयोगकर्ता कैसे प्राप्त करें? डिक्श्चर डेटाबेस स्कीमा VBA, सरणी से डुप्लिकेट निकालें WinForms पाठ बॉक्स के लिए कस्टम कैरेट ब्राउज़र को एजेक्स कॉल के लिए इंतजार करने के बाद भी पूरा करने की प्रतीक्षा है (jQuery) $ Location.path के साथ AngularJS पेजिंग लेकिन कोई ngView पुनः लोड नहीं npm sudo बिना त्रुटि फेंकता मैं पहले नाम के पहले अक्षर और अंतिम नाम को सी # में कैसे कैपिटल कर सकता हूं? कैसे जावास्क्रिप्ट के साथ iframe से चयनित पाठ पाने के लिए? JQuery के साथ एचटीएमएल टिप्पणी का चयन

हाइबरनेट प्राथमिक कुंजी के लिए आदिम या आवरण

मैं विभिन्न हाइबरनेट ट्यूटोरियल और नमूनों को अपनी पहचान / प्राथमिक कुंजी प्रॉपर्टी के लिए देख रहा हूं, कुछ जावा आदिम प्रकार का उपयोग करते हैं, कुछ आवरण प्रकार का उपयोग करता है;

private int id; 

बनाम

  private Integer id; 

इकाई कुंजी के लिए मैं और दूसरे का उपयोग क्यों करूँगा?

Solutions Collecting From Web of "हाइबरनेट प्राथमिक कुंजी के लिए आदिम या आवरण"

सीतनिद्रा में होना बिंदु दृष्टिकोण से, यह कुछ भी नहीं बदलता है क्योंकि हाइबरनेट उन का प्रतिनिधित्व करने के लिए समान हाइबरनेट प्रकार का उपयोग करता है।

हालांकि, जैसा कि बाइटकोड निन्जा द्वारा बताया गया है, आप एक असाइन इंट 0 के डिफ़ॉल्ट मान को एक असाइन 0 से अलग नहीं कर सकते हैं, जबकि null साथ कोई भी अस्पष्टता नहीं है (एक null आईडी हमेशा एक नई इकाई है), यही कारण है मैं एक अतुलनीय आवरण प्रकार का उपयोग करना पसंद करता हूं।

और यह हाइबरनेट सिफारिश है। संदर्भ प्रलेखन से:

4.1.2। एक पहचानकर्ता संपत्ति प्रदान करें (वैकल्पिक)

बिल्ली में आई आईडी नामक एक संपत्ति है डेटाबेस तालिका के प्राथमिक कुंजी कॉलम में यह प्रॉपर्टी नक्शे। संपत्ति को कुछ भी कहा जा सकता है, और इसका प्रकार कोई आदिम प्रकार हो सकता है, कोई आदिम "आवरण" प्रकार, java.lang.String या java.util.Date यदि आपकी विरासत डेटाबेस तालिका में समग्र कुंजी है, तो आप इन प्रकार के गुणों के साथ एक उपयोगकर्ता परिभाषित क्लास का उपयोग कर सकते हैं (अध्याय में बाद में समग्र पहचानकर्ता पर अनुभाग देखें।)

पहचानकर्ता संपत्ति कड़ाई से वैकल्पिक है आप उन्हें छोड़ सकते हैं और सीतनिद्रा में होना ऑब्जेक्ट आइडेंटिफ़ार्स का आंतरिक रूप से ट्रैक रख सकते हैं। हम इसकी सिफारिश नहीं करते हैं, हालांकि।

वास्तव में, कुछ कार्यक्षमता केवल कक्षाओं के लिए उपलब्ध होती है जो एक पहचानकर्ता संपत्ति घोषित करते हैं:

  • अलग ऑब्जेक्ट्स (कैसकेड अपडेट या कैसकेड मर्ज) के लिए ट्रांसमिटिट रिचाटैक्टमेंट – धारा 10.11, "ट्रांजिटिव डायस्टेंस" देखें
  • Session.saveOrUpdate ()
  • Session.merge ()

हम अनुशंसा करते हैं कि आप निरंतर कक्षाओं पर निरंतर-नामित पहचानकर्ता गुणों को घोषित करें और आप एक नल योग्य (अर्थात, गैर-आदिम) प्रकार का उपयोग करें।

और मैं वास्तव में इसे अपने बेस क्लास में लाभ उठाता हूं:

 @MappedSuperclass public class BaseEntity implements Serializable { private static final long serialVersionUID = 1L; private Long id; @Id @GeneratedValue(strategy = GenerationType.AUTO) public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Transient public boolean isNew() { return (this.id == null); } } 

मैं आवरण प्रकारों का उपयोग करना पसंद करता हूं, क्योंकि अन्यथा, जब हम आदिम प्रकारों का उपयोग करते हैं, तो प्राथमिक कुंजी id डिफ़ॉल्ट रूप से 0 सेट हो जाती है, और 0 इकाई के संबंधित तालिका में वास्तविक id कॉलम का मान हो सकता है, और यह कभी कभी कीड़े को हल करने के लिए मुश्किल हो

लेकिन आवरण का उपयोग करते हुए, id का डिफ़ॉल्ट मान null हो जाएगा और प्राथमिक कुंजी कॉलम में कोई null मान नहीं हो सकता है, इस प्रकार आप उस इकाई को अद्यतन नहीं कर सकते हैं जिसका id मान आपके अनुप्रयोग के तर्क से मान्य मान के साथ सेट नहीं है।

आप अपनी प्राथमिक कुंजी को एक आदिम या एक आवरण के रूप में निर्दिष्ट कर सकते हैं। और जब से आम तौर पर Integer आवश्यकता नहीं होती है, तब से यह एक int साथ सरल रखने के लिए सबसे अच्छा है

Oracle.com पर अधिक जानकारी