2013-06-21 2 views
9

Я следую за Slick documentation example for autoincrementing fields, и у меня возникли проблемы с созданием mapped projection, который ... ну, только один столбец.Scala выступы в 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 _) 

} 

Но затем я начинаю получать ту же ошибку, что и выше. "value <> не является членом scala.slick.lifted.Column [String]"

Что я на самом деле делаю? У меня просто нет projection, потому что у меня только один столбец? Если да, то что должно Я делаю?

ответ

7

Это известная проблема с Slick; отображаемые проекции не работают с одним столбцом. См. https://github.com/slick/slick/issues/40

К счастью, для работы вашего кода вам не нужна проекция с отображением. Просто опустите все, начиная с <>. См. scala slick method I can not understand so far для подробного объяснения выступов. Он включает в себя информацию, необходимую для начала работы.

 Смежные вопросы

  • Нет связанных вопросов^_^