Scala Slick:带有可为空列的 groupBy

Scala Slick: groupBy with nullable column

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

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>

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

提前致谢。

因此,如果您有一个可为空的列,Slick 应该根据您的查询 return 一个 Option[T],但根据我的阅读,分组依据在很多情况下都是错误的,所以我假设它应该 return 选项可能是错误的。

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

但也感觉您可能 运行 进入不受支持的内容,如下所示: https://github.com/slick/slick/issues/1285

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

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