Mongo Java-driveren har fastslået, at værdien af serial
kan 'passe' ind i en INT32, så den behandler den som sådan. Når du kalder doc.getLong()
du beder chaufføren om at kaste sit heltal til et langt, deraf class cast-undtagelsen. Hvis f.eks. værdien af serial
var 2147483648
(dvs. den maksimale heltalværdi + 1) så ville Mongo Java-driveren anse det for at være en INT64, og du kan derefter trygt påkalde doc.getLong()
.
Så da (a) du har modelleret denne attribut som en Long
i din klassemodel og (b) ikke hver vedvarende værdi af denne attribut kræver lagring som en INT64
... du skal være følsom over for dens vedvarende type, når du konverterer den til en Long.
Hvordan? Nå, så længe serial
attribut bevares som en slags nummer (f.eks. INT32
, INT64
) så dette kald ...
doc.get(DBConstants.SERIAL)
... vil altid returnere et objekt, som er en underklasse af java.lang.Number
og derfor caster til Number
og ved at bruge longValue()
vil virke.
For eksempel:
serial = ((Number) doc.get(DBConstants.SERIAL)).longValue()