Driver Mongo Java telah menentukan bahwa nilai serial
dapat 'pas' dalam INT32 sehingga memperlakukannya seperti itu. Saat Anda memanggil doc.getLong()
anda meminta driver untuk memberikan Integer ke Long, maka kelas memberikan pengecualian. Jika, misalnya, nilai serial
tadinya 2147483648
(yaitu nilai integer maks + 1) maka driver Mongo Java akan menganggapnya sebagai INT64 dan Anda kemudian dapat dengan aman memanggil doc.getLong()
.
Jadi, karena (a) Anda telah memodelkan atribut ini sebagai Long
dalam model kelas Anda dan (b) tidak setiap nilai yang dipertahankan dari atribut ini memerlukan penyimpanan sebagai INT64
... Anda harus peka terhadap tipe bertahannya saat mengubahnya menjadi Long.
Bagaimana? Nah, asalkan serial
atribut dipertahankan sebagai semacam angka (mis. INT32
, INT64
) lalu panggil ini ...
doc.get(DBConstants.SERIAL)
... akan selalu mengembalikan objek yang merupakan subkelas dari java.lang.Number
dan karena itu casting ke Number
dan menggunakan longValue()
akan berhasil.
Misalnya:
serial = ((Number) doc.get(DBConstants.SERIAL)).longValue()