【问题标题】:Cassandra unset int becomes 0 when converted to Option in Scala在 Scala 中转换为 Option 时,Cassandra unset int 变为 0
【发布时间】:2016-04-11 16:06:41
【问题描述】:

我有一个 cassandra 行

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

我正在使用 datastax java 驱动程序来查询这个结果,然后将 Row 映射到 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)

插入时未设置 prioritylogo 字段。如果我只是打印该行,我会得到正确的结果:

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

有什么想法吗?

【问题讨论】:

  • 好吧,scala中的IntAnyVal而不是AnyRef,因此它不能是null(就像java中的int)所以这就是为什么你得到你的null int为0 /也许你的数据库设计是错误的?也许你应该使用其他的东西来表示缺失/未知的优先级,比如 -1,或者使用字符串,或者这个 api 提供了一些其他方法,但我不熟悉。

标签: scala cassandra cassandra-2.0 datastax-java-driver


【解决方案1】:

谢谢@Lukasz,我现在可以看到问题了。

由于我无法更改数据模型,我最终在映射时进行了isNull 检查。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 2013-11-14
    相关资源
    最近更新 更多