Рассмотрим объект таблицы «Избранное» ниже. Мы хотим написать запрос для поиска «Избранного» по их типу (определенному ниже). Мы также определили Typemapper для сопоставления FavoriteType со строкой для базы данных.
import scala.slick.driver.PostgresDriver.simple._
//Other imports have been omitted in this question
object Favorites extends Table[Favorite]("favorites") {
// Convert the favoriteTypes to strings for the database
implicit val favoriteMapping: TypeMapper[FavorietType] = MappedTypeMapper.base[FavorietType, String](
favType => FavorietType.values.find(_ == favType).get.mapping,
mapping => FavorietType.values.find(_.mapping == mapping).get
)
def favoriteType = column[FavoriteType]("type")
//other columns here
Это запрос, который я хочу написать (однако он не компилируется)
def queryByFavoriteType(ftype : FavoriteType)(implicit s: Session) = {
for(
f <- Favorieten if f.favoriteType === ftype
) yield f
}
}
Здесь я определил различные объекты FavoriteType (это вне объекта Favorieten)
sealed case class FavorietType(mapping: String) {
override def toString = mapping.capitalize
}
object FavoriteType {
object Exam extends FavoriteType("examen")
object Topic extends FavoriteType("onderwerp")
object Paper extends FavoriteType("profielwerkstuk")
val values = Seq(Exam , Topic , Paper )
}
У меня проблема в том, что запрос не компилируется: value === is not a member of scala.slick.lifted.Column[models.gebruiker.FavorietType]
Похоже, что === нельзя использовать для сравнения пользовательского типа, правда ли это? Есть ли альтернативный способ сделать это?
Редактировать
Связанная проблема: до того, как у меня был TypeMapper без явного типа, он был определен как implicit val favoriteMapping = MappedTypeMapper.base[FavorietType, String]( ...
Когда я напишу запрос, который сравнит FavoriteType.Exam (например), такой как
def queryByFavoriteExam()(implicit s: Session) = {
for(f <- Favorieten if f.favorietType === FavorietType.Exam) yield f
}
Это приведет к ошибке could not find implicit value for evidence parameter of type scala.slick.lifted.TypeMapper[models.gebruiker.FavorietType.Exam.type]
Решение для этого такое же, как и представленное ниже.
value === is not a member of scala.slick.lifted.Column
, когда неявный сеанс отсутствует/отсутствует в контексте запроса. - person Jay Taylor   schedule 11.04.2014