Ovladač Mongo Java určil, že hodnota serial
může se „vejít“ do INT32, takže s ním tak zachází. Když zavoláte doc.getLong()
žádáte řidiče, aby přehodil své celé číslo na Long, proto výjimka přetypování třídy. Pokud je například hodnota serial
byl 2147483648
(tj. maximální celočíselná hodnota + 1), pak by to ovladač Mongo Java považoval za INT64 a vy byste pak mohli bezpečně vyvolat doc.getLong()
.
Takže od (a) jste tento atribut modelovali jako Long
ve vašem modelu třídy a (b) ne každá trvalá hodnota tohoto atributu vyžaduje uložení jako INT64
... při převodu na dlouhý musíte být citliví na jeho trvalý typ.
Jak? No, pokud serial
atribut je zachován jako nějaký druh čísla (např. INT32
, INT64
), pak toto volání ...
doc.get(DBConstants.SERIAL)
... vždy vrátí objekt, který je nějakou podtřídou java.lang.Number
a proto přetypování na Number
a pomocí longValue()
bude fungovat.
Například:
serial = ((Number) doc.get(DBConstants.SERIAL)).longValue()