Slick中的Scala投影只有一列

时间:2013-06-21 21:20:32

标签: scala projection slick

我正在关注Slick documentation example for autoincrementing fields并且我在创建mapped projection时遇到了问题......好吧,只有一列。

case class UserRole(id: Option[Int], role: String)

object UserRoles extends Table[UserRole]("userRole") {
  def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
  def role = column[String]("ROLE")
  // ...
  def * = id.? ~ role <> (UserRole, UserRole.unapply _)
      // NEXT LINE ERRORS OUT
  def forInsert = role <> ({t => UserRole(None, t._1)}, {(r: UserRole) => Some((r.role))}) returning id   
}

错误是“value&lt;&gt;不是scala.slick.lifted.Column [String]”的成员

我还认为设计我的架构会更有效:

case class UserRole(role: String)

object UserRoles extends Table[UserRole]("userRole") {
  def role = column[Int]("ROLE", O.PrimaryKey)
  // ...
  def * = role <> (UserRole, UserRole.unapply _)

}

但是我也开始得到与上面相同的错误。 “value&lt;&gt;不是scala.slick.lifted.Column [String]的成员”

我到底在做什么?我不再拥有projection,因为我只有一列吗?如果是这样,应该我在做什么?

1 个答案:

答案 0 :(得分:7)

这是Slick的一个已知问题;映射的投影不适用于单个列。见https://github.com/slick/slick/issues/40

幸运的是,您不需要映射投影即可使代码正常工作。只需省略<>之后的所有内容即可。有关投影的详细解释,请参阅scala slick method I can not understand so far。它包含了您需要的信息。