使用Projection定义要在Slick中选择的列的列表

时间:2013-06-26 05:58:39

标签: scala slick

我在Slick中有表定义:

object ADB {
  extends BaseDB[A]("a")
  with PostgresDriver{
  def id = column[Long]("id", O.PrimaryKey)
  def name = column[String]("name")
  ...
  def * = id ~ name ~ ... <> (A.apply _, A.unapply _)

  def forSelect = id ~ name
}

查询forSelect时是否可以引用A

我希望在一个地方保留要选择的字段列表,以便将来forSelect推送到特质。

2 个答案:

答案 0 :(得分:4)

我相信你可以像这样完成你想要的东西:

( for( a <- ADB ) yield a.forSelect ).list

这与stefan.schwetschke发布的内容之间的区别在于我使用实例a来引用forSelect而不是从ADB对象本身访问它。

答案 1 :(得分:0)

试试

...map(ADB.forSelect)

for( ... ) yield ADB.forSelect

以下对我有用:

import scala.slick.driver.H2Driver.simple._
import Database.threadLocalSession


object ADB extends Table[(Long, String)]("a") {
  def id = column[Long]("id", O.PrimaryKey)
  def name = column[String]("name")
  def * = id ~ name 

  def forSelect = id ~ name
}

Database.forURL("jdbc:h2:mem:test1", driver = "org.h2.Driver") withSession {
  ( for( a <- ADB ) yield ADB.forSelect ).list
}