Le pilote Java Mongo a déterminé que la valeur de serial
peut « tenir » dans un INT32 afin qu'il le traite comme tel. Lorsque vous invoquez doc.getLong()
vous demandez au pilote de convertir son Integer en Long, d'où l'exception de conversion de classe. Si, par exemple, la valeur de serial
était 2147483648
(c'est-à-dire la valeur entière maximale + 1), le pilote Mongo Java considérerait qu'il s'agit d'un INT64 et vous pourriez alors invoquer en toute sécurité doc.getLong()
.
Donc, puisque (a) vous avez modélisé cet attribut comme un Long
dans votre modèle de classe et (b) toutes les valeurs persistantes de cet attribut ne nécessitent pas de stockage en tant que INT64
... vous devez être sensible à son type persistant lors de sa conversion en Long.
Comment? Eh bien, tant que le serial
l'attribut est conservé comme une sorte de nombre (par exemple INT32
, INT64
) puis cet appel ...
doc.get(DBConstants.SERIAL)
... renverra toujours un objet qui est une sous-classe de java.lang.Number
et donc la conversion en Number
et en utilisant longValue()
fonctionnera.
Par exemple :
serial = ((Number) doc.get(DBConstants.SERIAL)).longValue()