MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB :essayer de lire Long à partir de JSON entraîne l'impossibilité de convertir java.lang.Integer en java.lang.Long

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