2013-07-09 65 views
0

我仍然試圖抓住scala,Play和anorm的某些方面。現在,我閱讀所有手冊和在線文檔,但我似乎可以爲我的問題找到令人滿意的解決方案。Anorm並獲得[雙]

我已用於檢索的對象下面的代碼稱爲MyThing:

case class MyThing(val code: String, val type:String, val value: Double, var id:Long) 

object MyThing{ 

    val myThingConverter = { 
    get[String]("type") ~ get[String]("code")~get[Double]("value") ~ get[Long]("id") match { 
     case type ~ code ~ value ~ id => 
     MyThing("test", " test", value , 213) 
    } 
    } 


    val loadQuery = 
    """ 
     "select * from THINGS where id = {id}" 
    """ 

    def loadThings(id: Long): Option[Thing] = { 
    DB.withConnection { 
     implicit c => 
     SQL(loadQuery) 
      .on('id -> id).as(myThingConvert *) 
    }.headOption 
} 

的問題是,一個錯誤是在部分「MyThing(‘測試’,‘測試’,值,213)」給定。錯誤是爲「值」:

Type mismatch, expected: Double: actual: Any 

我在做什麼錯?

編輯:新增失蹤的parm

詩篇。

我有這樣的感覺,即從選擇查詢的結果集中提取值的模式匹配用於創建對象,這實在太過於誇張。有沒有另外一種方法可以減輕痛苦地完成這項工作?

+0

您的案例類(MyThing)的定義是否缺少類型參數?您提供的定義只有三個參數,並且您將它用作四個參數。 – Todd

+0

對不起,複製/粘貼時出錯。修復。謝謝。 – dstibbe

回答

1

當我更換「匹配」在你的轉換器「地圖」,它編譯對我來說:

val myThingConverter = { 
    get[String]("type") ~ get[String]("code") ~ getDouble]("value") ~ get[Long]("id") map { 
    case tpe ~ code ~ value ~ id => 
     MyThing("test", " test", value , 213) 
    } 
} 

而且,你不能/不應該在命名變量斯卡拉「類型」。

+0

** doh **這似乎是正確的。今晚我會試試它:-) – dstibbe