6

该表定义如下:

CREATE TABLE Session (
    id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    something varchar(32),
    PRIMARY KEY (id)
);

我的查询如下所示:

SQL("SELECT something FROM Session WHERE id={id}").on("id" -> id).as(str("something") ?)

虽然这Option[String]在编译时给出了正确的类型 (),但它RuntimeException(UnexpectedNullableFound(SESSION.SOMETHING))在运行时会导致 a。

作为记录,我使用的是 Play 1.2.4、Play Scala 0.9.1 和捆绑的 H2 数据库。

4

1 回答 1

9

问题是这str("something") ?意味着从不可为空的列“某物”中获取,但我不确定是否会有一行。我想你想要的是:

SQL("SELECT something FROM Session WHERE id={id}").on("id" -> id).as(get[Option[String]]("something") ?).getOrElse(None)

SQL 语句原样给我们一个Option[Option[String]],因为我们不确定该行是否存在,如果该行存在,我们不确定该列是否为空。这就是为什么我们需要做一个 getOrElse 来把它简化为Option[String]

于 2012-02-29T08:08:13.657 回答