2016-08-23 5 views
0

Scala 2.11 + Slick 3.1.0 + Evolutions + H2データベースを使用して、null可能な列からすべての結果を取得しようとしています。 NOT NULL列に対してgroupBy操作を実行すると、すべてが期待通りに機能します。しかし、私たちはこの本を実行すると、列は、NULL可能である場合:Scala Slick: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> 

は、私が検索し、余分なを追加しようとしています空の値やヌル値をカバーしようとしたが、うまくいかなかったか、あるいは私のケースが正しくない可能性があります。

ありがとうございます。

+0

テーブル表現でオプションとして列を定義しましたか? –

+0

はい、私はすでにそれをしました。 – lcappa

答えて

1

列の定義はつまり、NULL可能でなければなりません:def tenant = column[Option[String]]def tenant = column[Option[String]]

実際にmetrics.groupBy(_.tenant).map { case (tenant, group) => tenant }を実行すると、結果としてSeqにNPEが含まれるNull値が含まれることがあります。

+0

これは機能します!私は、フィールドがオプションかどうかを指定する必要があると思っただけで、マッピング部分とSQLテーブル定義に指定していました。ありがとう。 – lcappa

0

もしあなたがヌル可能なカラムを持っていれば、Slickはクエリに基づいてOption[T]を返すべきですが、私が読んだところからグループ化するのはたくさんのインスタンスにバグがあります。戻るオプション。

マニュアルにはさらに役立つ情報があります。 http://slick.lightbend.com/doc/3.1.0/sql-to-slick.html#id19

いますが、ここのようにサポートされていない何かに実行されている可能性があるように、それはまた、感じている: https://github.com/slick/slick/issues/1285

+0

戻り値の型はOption [String]です。私のテーブル定義に正しく追加されています。 – lcappa

+0

それはあなたがしているものが意図されていないかもしれないように聞こえるかもしれません。おそらく、人々は滑らかなジッターで人々にpingをして、もっと役立つかもしれません。 –

関連する問題