/ / У Slick, як реалізувати декілька проекцій для таблиці? - scala, playframework, slick, slick-2.0

У Slick, як реалізувати кілька прогнозів для таблиці? - scala, playframework, slick, slick-2.0

Ось коди (я використовую Slick 2.1):

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]                                                                             ^

Я бачив a блог про це, але це виглядає досить складно і не має пояснень ..

Хто-небудь має уявлення про це? Дякую!

Відповіді:

2 для відповіді № 1

Slick очікує, що ім'я користувача є опцією [String] у проекції "профілю"

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

Очевидно, що Slick тут не вміє малювати стовпці з класом справ.