nau*_*nau 0 scala slick slick-3.0
我想在光滑的查询中使用我的自定义对象作为值,类似于 Scala Enumeration。
sealed trait UserStatus
object UserStatus {
object Active extends UserStatus
object Deleted extends UserStatus
}
Run Code Online (Sandbox Code Playgroud)
我已经为 UserStatus 定义了 MappedColumnType 并且它工作正常。
implicit val UserStatusColumn = MappedColumnType.base[UserStatus, String](_.toString, _ => UserStatus.Active)
Run Code Online (Sandbox Code Playgroud)
直到我想在查询中使用这些对象。
for {
u <- slickUsers
if u.status === UserStatus.Active
} yield u
Run Code Online (Sandbox Code Playgroud)
我得到错误
Error:(26, 34) type mismatch;
found : models.UserStatus.Active.type
required: slick.lifted.Rep[?]
if u.status === UserStatus.Active
Run Code Online (Sandbox Code Playgroud)
当我明确说它是 UserType 时,它工作正常:
for (u <- slickUsers if u.status === UserStatus.Active.asInstanceOf[UserStatus]) yield u
Run Code Online (Sandbox Code Playgroud)
我需要以某种方式提示 Slick Active.type 是 UserStatus 类型。知道怎么做吗?
您需要在这里帮助编译器,类型注释是一种简单的方法:
for {
u <- slickUsers
if u.status === (UserStatus.Active : UserStatus)
} yield u
Run Code Online (Sandbox Code Playgroud)
一些使用的另一个技巧是创建一组“智能构造函数”:
object UserStatus {
object Active extends UserStatus
object Deleted extends UserStatus
val active: UserStatus = Active
val deleted: USerStatus = Deleted
}
Run Code Online (Sandbox Code Playgroud)
...它允许你写:
for {
u <- slickUsers
if u.status === UserStatus.active
} yield u
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
802 次 |
| 最近记录: |