2012-02-11 29 views
6

Bảng này được quy định như sau:Chơi Scala Anorm phân tích cú pháp ném UnexpectedNullableFound ngay cả khi phân tích cú pháp được đánh dấu là không bắt buộc

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

Và truy vấn của tôi trông như thế này:

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

Trong khi điều này mang lại cho đúng loại (Option[String]) tại thời gian biên dịch nó gây ra một RuntimeException(UnexpectedNullableFound(SESSION.SOMETHING)) khi chạy.

Để lưu nội dung, tôi đang sử dụng Play 1.2.4, Play Scala 0.9.1 và cơ sở dữ liệu H2 đi kèm.

Trả lời

9

Vấn đề là str("something") ? có nghĩa là nhận được từ cột không thể bỏ qua "cái gì đó" nhưng tôi không chắc chắn liệu sẽ có một hàng hay không. Tôi nghĩ rằng những gì bạn muốn là:

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

Các câu lệnh SQL như là cho chúng ta một Option[Option[String]], bởi vì chúng tôi không chắc chắn nếu hàng tồn tại, và nếu hàng là có, chúng tôi không chắc chắn nếu cột là null hay không. Đó là lý do tại sao chúng tôi cần phải thực hiện getOrElse để chỉ giảm số tiền đó thành một số Option[String]

Các vấn đề liên quan