9

我正在关注自动递增字段的 Slick 文档示例,但在创建映射投影时遇到了麻烦……好吧,只有一列。

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   
}

错误是“值 <> 不是 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 _)

}

但是随后我也开始遇到与上述相同的错误。“值 <> 不是 scala.slick.lifted.Column[String] 的成员”

我到底在做什么?我是否因为只有一列而不再有投影?如果是这样,我该怎么

4

1 回答 1

7

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

幸运的是,您的代码不需要映射投影即可工作。只需省略之后的所有内容,包括<>. 请参阅到目前为止我无法理解的 scala slick 方法,以获得对预测的很好解释。它包括您开始工作所需的信息。

于 2013-06-24T23:48:36.900 回答