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