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