Mongo Java-drivrutinen har fastställt att värdet på serial
kan 'passas' i en INT32 så den behandlar den som sådan. När du anropar doc.getLong()
du ber föraren att casta sitt heltal till ett långt, därav klassens cast-undantag. Om till exempel värdet på serial
var 2147483648
(dvs det maximala heltalsvärdet + 1) då skulle Mongo Java-drivrutinen anse att det är en INT64 och du kan sedan säkert anropa doc.getLong()
.
Så eftersom (a) du har modellerat detta attribut som en Long
i din klassmodell och (b) inte alla kvarstående värden av detta attribut kräver lagring som en INT64
... du måste vara känslig för dess beständiga typ när du konverterar den till en lång.
Hur? Tja, så länge som serial
attributet kvarstår som något slags nummer (t.ex. INT32
, INT64
) sedan detta samtal ...
doc.get(DBConstants.SERIAL)
... kommer alltid att returnera ett objekt som är någon underklass av java.lang.Number
och castar därför till Number
och med longValue()
kommer att fungera.
Till exempel:
serial = ((Number) doc.get(DBConstants.SERIAL)).longValue()