Драйверът на Mongo Java е определил, че стойността на serial
може да се "побере" в INT32, така че го третира като такъв. Когато извикате doc.getLong()
вие молите драйвера да преобразува своето цяло число към Long, оттук и изключението за преобразуване на класа. Ако, например, стойността на serial
беше 2147483648
(т.е. максималната стойност на цяло число + 1), тогава драйверът на Mongo Java ще приеме, че това е INT64 и вие можете безопасно да извикате doc.getLong()
.
Така че, тъй като (a) сте моделирали този атрибут като Long
във вашия модел на клас и (б) не всяка персистирана стойност на този атрибут изисква съхранение като INT64
... трябва да сте чувствителни към неговия постоянен тип, когато го конвертирате в Long.
как? Е, стига serial
атрибут се запазва като някакъв вид число (напр. INT32
, INT64
), тогава това обаждане ...
doc.get(DBConstants.SERIAL)
... винаги ще връща обект, който е някакъв подклас на java.lang.Number
и следователно кастинг към Number
и използвайки longValue()
ще работи.
Например:
serial = ((Number) doc.get(DBConstants.SERIAL)).longValue()