RethinkDB Java-дравер возвращает double как Long

149
17 мая 2019, 23:00

Мы сохраняем данные в клевой БД 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

READ ALSO
SQLSyntaxErrorException: ORA-02201: sequence not allowed here

SQLSyntaxErrorException: ORA-02201: sequence not allowed here

При попытке вытащить данные вылетает ошибка (местами обрезал ибо ограничение):

175
Как не наследовать св-во transform?

Как не наследовать св-во transform?

Коллеги, подскажитеОбхожу li и ставлю активный класс с увеличение scale 1

144
Как проверить innertext или text(jquery) на null

Как проверить innertext или text(jquery) на null

Есть задача добавляять в список дел , через promptНо я не могу выйти нормально из цикла тк innertext or text от propmt при cancel (null) возвращает значение пустой...

161