使用Slick返回映射对象

时间:2013-07-10 18:13:04

标签: scala playframework-2.0 slick

如何使用Slick返回映射对象?使用以下代码,我的查询返回List [(Int,String)]而不是像我想要的那样返回List [Task]。这是不可能使用Slick或我是否正在考虑Slick错误的方式是不是ORM?我正在尝试返回一个查询,并使用Play2框架在视图模板中使用它。我想最终访问task.id task.label等对象......谢谢。

import play.api.Play.current
import play.api.db._
import scala.slick.driver.H2Driver.simple._

case class Task(id: Int, label: String)

object Task extends Table[(Int, String)]("TASKS") {

  lazy val database = Database.forDataSource(DB.getDataSource())

  def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)

  def label = column[String]("LABEL")

  def * = id ~ label

  def all() : List[Task] = database.withSession { implicit db: Session =>
    Query(Task).list
  }
}

1 个答案:

答案 0 :(得分:0)

问题在于您如何定义表格。尝试将表格定义更改为:

case class Task(id: Int, label: String)
object Task extends Table[Task]("TASKS") {
  lazy val database = Database.forDataSource(DB.getDataSource())
  def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
  def label = column[String]("LABEL")
  def * = id ~ label <> (Task.apply _, Task.unapply _)
  def all() : List[Task] = database.withSession { implicit db: Session =>
    Query(Task).list
  }
}

不同之处在于我传递给Table的类型参数是Task而不是(Int, String)。这应该可以解决您的问题。