MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मोंगोडीबी:जेएसओएन से लंबे समय तक पढ़ने की कोशिश कर रहा है java.lang.Integer को java.lang.Long पर नहीं डाला जा सकता है

Mongo Java ड्राइवर ने निर्धारित किया है कि serial . का मान एक INT32 में 'फिट' हो सकता है, इसलिए यह इसे इस तरह मानता है। जब आप doc.getLong() invoke का आह्वान करते हैं आप ड्राइवर से अपने इंटीजर को लंबे समय तक डालने के लिए कह रहे हैं, इसलिए क्लास कास्ट अपवाद है। यदि, उदाहरण के लिए, serial . का मान था 2147483648 (अर्थात अधिकतम पूर्णांक मान + 1) तो Mongo Java ड्राइवर इसे INT64 मानेगा और फिर आप सुरक्षित रूप से doc.getLong() का आह्वान कर सकते हैं ।

इसलिए, चूंकि (a) आपने इस विशेषता को Long . के रूप में प्रतिरूपित किया है आपके वर्ग मॉडल में और (बी) इस विशेषता के प्रत्येक स्थायी मूल्य को INT64 के रूप में संग्रहण की आवश्यकता नहीं है ... इसे लंबे समय में परिवर्तित करते समय आपको इसके निरंतर प्रकार के प्रति संवेदनशील होना होगा।

कैसे? खैर, जब तक serial विशेषता किसी प्रकार की संख्या के रूप में बनी रहती है (उदा. INT32 , INT64 ) तो यह कॉल...

doc.get(DBConstants.SERIAL)

... हमेशा एक ऑब्जेक्ट लौटाएगा जो java.lang.Number . का कुछ उपवर्ग है और इसलिए Number . पर कास्ट किया जा रहा है और longValue() . का उपयोग कर रहे हैं काम करेगा।

उदाहरण के लिए:

serial = ((Number) doc.get(DBConstants.SERIAL)).longValue()



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb एकाधिक उप सरणी परिणाम लौटा रहा है और अन्य लौटाए गए परिणामों को छोड़कर

  2. जावा में मोंगोडीबी बेसिकडीबीऑब्जेक्ट बनाम दस्तावेज़

  3. एडब्ल्यूएस लैम्ब्डा (नोड.जेएस, वी। 8.10) और नेवला:डीबी के लिए MongoNetworkError कनेक्शन का समय समाप्त हो गया

  4. Percona MongoDB Kubernetes ऑपरेटर का अवलोकन

  5. MongoDB - क्षेत्र में गैर-संख्यात्मक वर्णों को पट्टी करें