Анализатор Play Scala генерирует UnexpectedNullableFound, даже если анализатор помечен как необязательный. - PullRequest
6 голосов
/ 12 февраля 2012

Таблица определяется следующим образом:

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 голосов
/ 29 февраля 2012

Проблема в том, что str("something") ? означает получить из необнуляемого столбца "что-то", но я не уверен, будет ли строка или нет. Я думаю, что вы хотите:

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

Оператор SQL as as дает нам Option[Option[String]], потому что мы не уверены, существует ли строка, и если строка есть, мы не уверены, является ли столбец нулевым или нет. Вот почему нам нужно сделать getOrElse, чтобы просто уменьшить его до Option[String]

...