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()