sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB:intentar leer Long de JSON hace que java.lang.Integer no se pueda convertir a java.lang.Long

El controlador Mongo Java ha determinado que el valor de serial puede 'encajar' en un INT32 por lo que lo trata como tal. Cuando invocas doc.getLong() le está pidiendo al controlador que convierta su Integer en Long, de ahí la excepción de conversión de clase. Si, por ejemplo, el valor de serial era 2147483648 (es decir, el valor entero máximo + 1), entonces el controlador Mongo Java consideraría que se trata de un INT64 y luego podría invocar con seguridad doc.getLong() .

Entonces, dado que (a) ha modelado este atributo como Long en su modelo de clase y (b) no todos los valores persistentes de este atributo requieren almacenamiento como INT64 ... debe ser sensible a su tipo persistente al convertirlo en Long.

¿Cómo? Bueno, siempre y cuando el serial el atributo se conserva como algún tipo de número (por ejemplo, INT32 , INT64 ) entonces esta llamada...

doc.get(DBConstants.SERIAL)

... siempre devolverá un objeto que es una subclase de java.lang.Number y, por lo tanto, enviar a Number y usando longValue() funcionará.

Por ejemplo:

serial = ((Number) doc.get(DBConstants.SERIAL)).longValue()