9

フィールドの自動インクリメントに関する Slick のドキュメントの例に従っていますが、マッピングされたプロジェクションの作成に問題があります...まあ、列が 1 つしかありません。

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] のメンバーではありません」

私は本当に何をしているのですか?列が 1 つしかないため、投影がなくなったのでしょうか。もしそうなら、私は何をすべきですか?

4

1 に答える 1

7

これは Slick の既知の問題です。マッピングされた射影は、単一の列では機能しません。https://github.com/slick/slick/issues/40を参照してください。

幸いなことに、コードが機能するためにマップされたプロジェクションは必要ありません。の後ろと . を含むすべてを省略して<>ください。射影の優れた説明については、私がこれまで理解できなかった scala slick method を参照してください。始めるために必要な情報が含まれています。

于 2013-06-24T23:48:36.900 に答える