我希望将自定义对象用作光滑查询中的值,类似于Scala Enumeration。
sealed trait UserStatus
object UserStatus {
object Active extends UserStatus
object Deleted extends UserStatus
}
我为UserStatus定义了MappedColumnType,它运行正常。
implicit val UserStatusColumn = MappedColumnType.base[UserStatus, String](_.toString, _ => UserStatus.Active)
直到我想要'在查询中使用这些对象。
for {
u <- slickUsers
if u.status === UserStatus.Active
} yield u
我收到错误
Error:(26, 34) type mismatch;
found : models.UserStatus.Active.type
required: slick.lifted.Rep[?]
if u.status === UserStatus.Active
当我明确表示它是UserType:
时,它工作正常for (u <- slickUsers if u.status === UserStatus.Active.asInstanceOf[UserStatus]) yield u
不知怎的,我需要提示Slick,Active.type是UserStatus类型。知道怎么做吗?
答案 0 :(得分:3)
你需要在这里帮助编译器,类型注释是一种简单的方法:
for {
u <- slickUsers
if u.status === (UserStatus.Active : UserStatus)
} yield u
另一个使用的技巧是创建一组&#34;智能构造函数&#34;:
object UserStatus {
object Active extends UserStatus
object Deleted extends UserStatus
val active: UserStatus = Active
val deleted: USerStatus = Deleted
}
...允许你写:
for {
u <- slickUsers
if u.status === UserStatus.active
} yield u
答案 1 :(得分:0)
你可以这样做:
-printf '\n'
您可以在此处找到实时版本:https://github.com/nemoo/play-slick3-example/blob/master/app/models/Task.scala