2015-04-30 2 views
-1

Вот коды (я использую Slick 2.1):В Slick, как реализовать несколько проекций для таблицы?

case class UserRecord(id: Long, 
          mID: String, 
          userName: Option[String], 
          firstName: Option[String], 
          lastName: Option[String], 
          fullName: Option[String], 
          email: String, 
          avatarUrl: Option[String], 
          createTime: Timestamp, 
          updateTime: Timestamp, 
          status: Int, 
          socialProviders: Int) 

    case class UserProfile (
     userName: String, 
     firstName: Option[String], 
     lastName: Option[String], 
     fullName: Option[String], 
     email: String, 
     avatarURL: Option[String]) 


class UserTable(tag: Tag) extends Table[UserRecord](tag, "User") { 
    def id = column[Long]("id", O.AutoInc) 

    def mID = column[String]("mID", O.PrimaryKey) 

    def username = column[Option[String]]("username") 

    def firstName = column[Option[String]]("firstname") 

    def lastName = column[Option[String]]("lastname") 

    def fullName = column[Option[String]]("fullname") 

    def email = column[String]("email") 

    def avatarUrl = column[Option[String]]("avataurl") 

    def createTime = column[Timestamp]("createTime") 

    def updateTime = column[Timestamp]("updateTime") 

    def status = column[Int]("status") 

    def socialProviders = column[Int]("socialProviders") 

    def * = (id, mID, username, firstName, lastName, fullName, 
    email, avatarUrl, createTime, updateTime, status, socialProviders) <>(UserRecord.tupled, UserRecord.unapply _) 

    def profile = (username, firstName, lastName, fullName, email, avatarUrl) <> (UserProfile.tupled, UserProfile.unapply _) 
} 

Я попытался создать два отображения * и profile в классе таблицы, однако, Slick жалуется на это:

[error] Slick does not know how to map the given types. 
[error] Possible causes: T in Table[T] does not match your * projection. Or you use an unsupported type in a Query (e.g. scala List). 
[error] Required level: scala.slick.lifted.FlatShapeLevel 
[error]  Source type: (scala.slick.lifted.Column[Option[String]], scala.slick.lifted.Column[Option[String]], scala.slick.lifted.Column[Option[String]], scala.slick.lifted.Column[Option[String]], scala.slick.lifted.Column[String], scala.slick.lifted.Column[Option[String]]) 
[error] Unpacked type: (String, Option[String], Option[String], Option[String], String, Option[String]) 
[error]  Packed type: Any 
[error] def profile = (username, firstName, lastName, fullName, email, avatarUrl) <> (UserProfile.tupled, UserProfile.unapply _) 
[error]                   ^

Я видел blog, но он выглядит довольно сложным и не имеет объяснений.

У кого-нибудь есть идеи об этом? Благодаря!

+0

Как уже упоминалось @dataBaseServer ниже, убедитесь, что у вас есть типы. – tuxdna

ответ

2

Slick ожидает Имя пользователя будет Опция [String] в проекции «Профиль»

case class UserProfile (
    userName: String, // Here 
    firstName: Option[String], 
    lastName: Option[String], 
    fullName: Option[String], 
    email: String, 
    avatarURL: Option[String]) 

Очевидно Slick здесь не знает, как отображать столбцы с классом случае.

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

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