2013-06-21 8 views
9

Ich folge der Slick documentation example for autoincrementing fields und ich habe Probleme beim Erstellen einer mapped projection, die ... nun, hat nur eine Spalte.Scala Projektionen in Slick für nur eine Spalte

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 
} 

Der Fehler ist „Wert <> ist kein Mitglied von scala.slick.lifted.Column [Zeichenfolge]“

Ich dachte auch, würde es effizienter sein, mein Schema zu entwerfen, wie so:

Aber dann fange ich an, den gleichen Fehler wie oben auch zu bekommen. "Wert <> ist kein Mitglied von scala.slick.lifted.Column [String]"

Was mache ich wirklich? Habe ich einfach keine projection mehr, weil ich nur eine Spalte habe? Wenn ja, was soll ich tun ?

Antwort

7

Dies ist ein bekanntes Problem mit Slick; Kartierte Projektionen funktionieren nicht mit einer einzelnen Spalte. Siehe https://github.com/slick/slick/issues/40

Zum Glück benötigen Sie keine zugeordnete Projektion für Ihren Code zu arbeiten. Lass einfach alles weg und nimm die <>. Eine großartige Erklärung der Projektionen finden Sie unter scala slick method I can not understand so far. Es enthält die Informationen, die Sie benötigen, um loszulegen.