O driver Mongo Java determinou que o valor de
serial
pode 'caber' em um INT32, então ele o trata como tal. Quando você invoca doc.getLong()
você está pedindo ao driver para converter seu Integer em um Long, daí a exceção de conversão de classe. Se, por exemplo, o valor de serial
era 2147483648
(ou seja, o valor inteiro máximo + 1), então o driver Mongo Java consideraria isso um INT64 e você poderia invocar com segurança doc.getLong()
. Então, já que (a) você modelou este atributo como um
Long
em seu modelo de classe e (b) nem todo valor persistente desse atributo requer armazenamento como um INT64
... você tem que ser sensível ao seu tipo persistente ao convertê-lo em um Long. Como? Bem, contanto que o
serial
atributo é persistido como algum tipo de número (por exemplo, INT32
, INT64
) então esta chamada... doc.get(DBConstants.SERIAL)
... sempre retornará um objeto que é alguma subclasse de
java.lang.Number
e, portanto, transmitindo para Number
e usando longValue()
vai funcionar. Por exemplo:
serial = ((Number) doc.get(DBConstants.SERIAL)).longValue()