MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB:il tentativo di leggere Long da JSON fa sì che non è possibile eseguire il cast di java.lang.Integer su java.lang.Long

Il driver Mongo Java ha determinato che il valore di serial può "entrare" in un INT32 quindi lo tratta come tale. Quando invochi doc.getLong() stai chiedendo al driver di eseguire il cast di Integer su Long, da qui l'eccezione di cast di classe. Se, ad esempio, il valore di serial era 2147483648 (ovvero il valore intero massimo + 1), il driver Mongo Java lo riterrebbe un INT64 e potresti quindi invocare in sicurezza doc.getLong() .

Quindi, dal momento che (a) hai modellato questo attributo come un Long nel tuo modello di classe e (b) non tutti i valori persistenti di questo attributo richiedono l'archiviazione come INT64 ... devi essere sensibile al suo tipo persistente quando lo converti in un Long.

Come? Bene, purché il serial l'attributo viene mantenuto come una sorta di numero (ad es. INT32 , INT64 ) quindi questa chiamata ...

doc.get(DBConstants.SERIAL)

... restituirà sempre un oggetto che è una sottoclasse di java.lang.Number e quindi trasmettere a Number e usando longValue() funzionerà.

Ad esempio:

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