Scala Slick:groupBy具有可空列

时间:2016-08-23 14:50:38

标签: scala slick

我正在尝试使用Scala 2.11 + Slick 3.1.0 + Evolutions + H2数据库从可空列中获取所有结果。在NOT NULL列上执行groupBy操作时,一切都按预期工作。但是,如果列可以为空,那么当我们运行它时:

def listAllTenants(): Future[Seq[String]] = {
    dbConfig.db.run(metrics.groupBy(metric => metric.tenant)
    .map {
        case (tenant, group) => tenant
    }.result)
 }

其中:

create table `METRIC` (

    (...)

    `tenant` VARCHAR(255),
);

抛出异常:

[error] c.w.g.c.ErrorHandler - Error while processing request. Exception> slick.SlickException: Read NULL value (null) for ResultSet column <computed>

我已经搜索并尝试添加一个额外的案例试图覆盖空值或空值,但它不起作用,或者我的情况可能不正确。

提前致谢。

2 个答案:

答案 0 :(得分:1)

列的定义应该是可空的,即:def tenant = column[Option[String]]def tenant = column[Option[String]]

确实,在执行metrics.groupBy(_.tenant).map { case (tenant, group) => tenant }时,结果Seq可能包含一个空值,这会导致您提及的NPE。

答案 1 :(得分:0)

因此,如果你有一个可以为空的列,Slick应该根据你的查询返回一个Option[T],但是从我读到的内容来看,group by是很多实例的错误,所以我可能错了假设它应该返回选项。

文档中有一些可能对您有帮助的信息。 http://slick.lightbend.com/doc/3.1.0/sql-to-slick.html#id19

但是也感觉你可能遇到像这里不支持的东西: https://github.com/slick/slick/issues/1285