如何在Anorm和Play Framework中使用可空列?

时间:2011-08-12 14:57:23

标签: scala null playframework anorm

我有一个案例类MyRecord,我想用于结果集中的每一行:

case class MyRecord(id: Int, remindeMe: Option[org.joda.time.DateTime])

如何选择表中的所有行并使用Scala和Anorm使用Play Framework返回MyRecord列表?

我尝试过:

def getRecords() : List[MyRecord] = {
      val records = SQL("SELECT id, data FROM mytable")().collect {
          case Row(id: Int, Some(data: Long)) => 
                      MyRecord(id, new org.joda.time.DateTime(data))
     }
}

如果列data为空,我想要None,否则我希望Some(data)作为案例类中的remindMe。是的,上面的Scala代码非常错误,但我不明白如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

这应该可以使用,因为您已经定义了选项:

def getRecords() : List[MyRecord] = {
      SQL("SELECT id, data FROM mytable")().collect {
          case Row(id: Int, Some(data: Long)) => 
                  MyRecord(id, Some(new org.joda.time.DateTime(data)))
          case Row(id: Int, None) => 
                  MyRecord(id, None)

     }
}

您粘贴的情况会忽略所有无效结果,因为它们与某些(数据)

不匹配

编辑:最后添加“toList”解决了它,正如@kassens所说。我在Play 1.2.2-Scala 0.91 env中测试过它。有办法给他点数吗? :)