Cassandra unset int становится 0 при преобразовании в Option в Scala

у меня есть ряд кассандры

slug | logo | name | priority
------+------+------+----------
test | null | Test |     null

Я использую java-драйвер datastax для запроса этого результата, а затем сопоставляю Row с классом case Scala:

Brand(r.getString("slug"), r.getString("name"), Option(     r.getInt("priority") )  ,Option( r.getString("logo")))

Результат должен был быть:

Brand(test,Test,None,None)

Но я получаю это:

Brand(test,Test,Some(0),None)

Оба поля priority и logo не были установлены при вставке. Если я просто напечатаю строку, я получу правильный результат:

[Row[test, NULL, Test, NULL]]

Любые идеи ?


person p_a_ll_a_b    schedule 07.01.2016    source источник
comment
ну, Int в scala - это AnyVal, а не AnyRef, поэтому он не может быть null (например, int в java), вот почему вы получаете нулевое целое как 0/Может быть, дизайн вашей базы данных неверен? Возможно, вам следует использовать что-то еще для обозначения отсутствующего/неизвестного приоритета, например -1, или использовать строки, или, может быть, есть какой-то другой метод, который предоставляет этот API, но я не знаком с ним.   -  person Łukasz    schedule 07.01.2016


Ответы (1)


Спасибо @Lukasz, теперь я вижу проблему.

Поскольку я не могу изменить модель данных, я поставил isNull проверку при отображении.

Brand(r.getString("slug"), r.getString("name"),(if( r.isNull("priority") ) None else Some(r.getInt("priority")) ), Option( r.getString("logo")))
person p_a_ll_a_b    schedule 07.01.2016