2012-02-11 17 views
6

表定義解析器被標記如下:播放斯卡拉ANORM解析器拋出UnexpectedNullableFound即使作爲可選

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數據庫。

回答

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]