我正在关注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,因为我只有一列吗?如果是这样,应该我在做什么?
答案 0 :(得分:7)
这是Slick的一个已知问题;映射的投影不适用于单个列。见https://github.com/slick/slick/issues/40
幸运的是,您不需要映射投影即可使代码正常工作。只需省略<>
之后的所有内容即可。有关投影的详细解释,请参阅scala slick method I can not understand so far。它包含了您需要的信息。