【发布时间】:2013-07-11 09:05:35
【问题描述】:
如何使用 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
}
}
【问题讨论】:
-
请注意,如果将单例对象放置在静态位置(包或其他单例对象),则在 Slick 1.x 中为 Table 使用单例对象可能会导致问题。为了安全起见,要么使用类和 val,要么将单例对象作为成员放在类/特征中。
-
@cvogt 我以前没有听说过这个,我见过的大多数例子都使用单例。您能否提供一个链接,以获取有关为什么应该避免这种情况的更多信息?
-
对应的Scala错误报告issues.scala-lang.org/browse/SI-3764
标签: scala playframework-2.0 slick