即使解析器被标记为可选,Play Scala Anorm解析器也会抛出UnexpectedNullableFound

时间:2012-02-11 23:14:58

标签: sql scala playframework anorm

该表定义如下:

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))

为了记录,我正在使用Play 1.2.4,Play Scala 0.9.1和捆绑的H2数据库。

1 个答案:

答案 0 :(得分: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]