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