MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB:tentar ler Long de JSON faz com que java.lang.Integer não possa ser convertido em java.lang.Long


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