该表定义如下:
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数据库。
答案 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]