Мы сохраняем данные в клевой БД RethinkDB. Проблема возникла с извлечением числовых значений типа Double. Числовые поля могут иметь значения как с дробной частью, так и без нее (пример: 17, 17.0, 17.7). Внутренний формат представления чисел в RethinkDB - 64-битный double. Однако java-драйвер извлекает числа без дробной части как Long, а число с дробной частью как Double. При этом в классах предметной области жестко прописаны типа полей double. Когда драйвер возвращает Long вместо Double, возникает исключение ClassCastException. Как решить эту проблему? Для инициализации каждого поля модели использовать instanceof или написать функцию конвертации?
Можно придумать что-то лучше такого костыля?
private double convert(Object value) {
if (value instanceof Long) {
return ((Long) value).doubleValue();
}
else return (double) value;
}
Код извлечения значения:
public Optional<Invoice> find(String uid) {
Cursor cursor = r.db("test").table("invoice")
.getAll(uid).optArg("index", "uid")
.run(connection);
if (!cursor.hasNext())
return Optional.empty();
HashMap document = (HashMap) cursor.next();
Invoice result = new Invoice();
result.setSenderDateTime((String) document.get("senderDateTime"));
result.setCreateDateTime((OffsetDateTime) document.get("createDateTime"));
result.setUpdateDateTime((OffsetDateTime) document.get("updateDateTime"));
result.setUid((String) document.get("uid"));
result.setDate((String) document.get("date"));
result.setNumber((Double) document.get("number"));
result.setMarked((Boolean) document.get("marked"));
result.setPosted((Boolean) document.get("posted"));
result.setSenderCityUID((String) document.get("senderCityUID"));
return Optional.of(result);
}
Не нашел аналог JPA/JdbcTemplate для RethinkDB
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости