Я застрял, пытаясь определить сопоставленные таблицы, используя черты в slick 3.1.0. Поскольку в официальных документах ничего не упоминается, я даже не уверен, возможно это или нет. Вот что у меня есть на данный момент:
Определение таблицы:
class PersonTable(tag: Tag) extends Table[PersonModel](tag, "person") {
def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
def firstName = column[String]("first_name", O.Length(PersonDb.FirstNameColumnLength))
def lastName = column[String]("last_name", O.Length(PersonDb.LastNameColumnLength))
def * = (id.?, firstName, lastName) <> (PersonModelImpl.tupled, PersonModelImpl.unapply _)
}
PersonModel:
trait PersonModel {
def id: Option[Int]
def firstName: String
def lastName: String
}
PersonModelImpl:
case class PersonModelImpl(
override val id: Option[Int],
override val firstName: String,
override val lastName: String)
extends PersonModel
Компиляция приведенного выше кода вызывает ошибку:
Compilation error[type mismatch;
found : slick.lifted.MappedProjection[models.PersonModelImpl,(Option[Int], String, String]
required: slick.lifted.ProvenShape[models.PersonModel]]
Однако изменение ...extends Table[PersonModel]...
на ...extends Table[PersonModelImpl]...
в определении таблицы работает безупречно.
Итак, в основном мой вопрос:
- Можно ли использовать черты
TableElementType
в сопоставленных таблицах? - Если да, что я делаю не так?