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

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

值得一提的是,我正在使用Play 1.2.4、Play Scala 0.9.1和捆绑的H2数据库。

1个回答

9
问题在于str("something") ?意味着从非空列“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]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接