Sterownik Mongo Java ustalił, że wartość serial
może "zmieścić się" w INT32, więc traktuje go jako taki. Po wywołaniu doc.getLong()
prosisz sterownik o rzutowanie liczby całkowitej na wartość Long, stąd wyjątek rzutowania klasy. Jeśli na przykład wartość serial
był 2147483648
(tj. maksymalna wartość całkowita + 1) wtedy sterownik Mongo Java uzna, że jest to INT64 i możesz bezpiecznie wywołać doc.getLong()
.
Tak więc, ponieważ (a) wymodelowałeś ten atrybut jako Long
w twoim modelu klasy i (b) nie każda utrwalona wartość tego atrybutu wymaga przechowywania jako INT64
... musisz być wrażliwy na jego utrwalony typ podczas konwertowania go na długi.
Jak? Cóż, o ile serial
atrybut jest utrwalany jako pewna liczba (np. INT32
, INT64
) to połączenie ...
doc.get(DBConstants.SERIAL)
... zawsze zwróci obiekt będący jakąś podklasą java.lang.Number
a zatem rzutowanie na Number
i używając longValue()
zadziała.
Na przykład:
serial = ((Number) doc.get(DBConstants.SERIAL)).longValue()