2012-02-11 11 views
6

se define la tabla de la siguiente manera:Juego Scala Anorm analizador lanza UnexpectedNullableFound incluso cuando el analizador está marcado como opcional

CREATE TABLE Session (
    id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
    something varchar(32), 
    PRIMARY KEY (id) 
); 

Y mi consulta es el siguiente:

SQL("SELECT something FROM Session WHERE id={id}").on("id" -> id).as(str("something") ?) 

Si bien esto da la correcta tipo (Option[String]) en tiempo de compilación provoca un RuntimeException(UnexpectedNullableFound(SESSION.SOMETHING)) en tiempo de ejecución.

Para el registro, estoy usando Play 1.2.4, Play Scala 0.9.1 y la base de datos H2 incluida.

Respuesta

9

El problema es que str("something") ? significa obtener de la columna que no admite nulos "algo" pero no estoy seguro de si habrá una fila o no. Creo que lo que quiere es:

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

La sentencia SQL tal como se nos da una Option[Option[String]], porque no estamos seguros de si existe la fila, y si la fila está ahí, no estamos seguros de si la columna es nulo o no. Es por eso que tenemos que hacer un getOrElse para simplemente reducirlo a un Option[String]

Cuestiones relacionadas