Trình điều khiển Java Mongo đã xác định rằng giá trị của serial
có thể 'phù hợp' trong INT32 để nó xử lý nó như vậy. Khi bạn gọi doc.getLong()
bạn đang yêu cầu trình điều khiển chuyển Integer của nó thành Long, do đó lớp truyền ngoại lệ. Ví dụ:nếu giá trị của serial
là 2147483648
(tức là giá trị số nguyên tối đa + 1) thì trình điều khiển Mongo Java sẽ coi đó là INT64 và sau đó bạn có thể gọi doc.getLong()
một cách an toàn .
Vì vậy, vì (a) bạn đã lập mô hình thuộc tính này dưới dạng Long
trong mô hình lớp của bạn và (b) không phải mọi giá trị tồn tại của thuộc tính này đều yêu cầu lưu trữ dưới dạng INT64
... bạn phải nhạy cảm với kiểu dai dẳng của nó khi chuyển nó thành Long.
Làm sao? Chà, miễn là serial
thuộc tính vẫn tồn tại dưới dạng một số loại số (ví dụ:INT32
, INT64
) thì cuộc gọi này ...
doc.get(DBConstants.SERIAL)
... sẽ luôn trả về một đối tượng là một số lớp con của java.lang.Number
và do đó truyền đến Number
và sử dụng longValue()
sẽ hoạt động.
Ví dụ:
serial = ((Number) doc.get(DBConstants.SERIAL)).longValue()