由於@Michal Tomanski提到below - 使用trait
/case object
■當存在一定問題。什麼,你需要做的是:
sealed trait UserType {
val code: Int
}
case object Member extends UserType {
override val code: Int = 0
}
case object Anonymous extends UserType {
override val code: Int = 1
}
object UserType {
def byId(id: Int): UserType = id match {
case Member.code => Member
case Anonymous.code => Anonymous
case _ => throw new IllegalArgumentException("...")
}
}
implicit val enumColumnType = MappedColumnType.base[UserType, Int](
e => e.code,
i => UserType.byId(i)
)
上面會允許你做這樣的查詢:
UserTable
.filter(_.userType === (Member :: UserType))
.result
這正是@Michal Tomanski指出。你可以做一些小技巧來平滑一點。
只需修改您的特點是這樣的:
sealed trait UserType {
val code: Int
// I added field below
val base: UserType = this
}
,然後你可以有你這樣的查詢:
UserTable
.filter(_.userType === Member.base)
.result
它可能會稍微更好的選擇比鑄造。
除此之外 - 我跟隨@Michal Tomanski答案(使用Enumeration
)假設就足夠了你的情況(或許與解決方案trait
/case object
s是更靈活,但另一方面有更多的管道,你需要做的事情可以在這個答案中看到)。
重複此:http://stackoverflow.com/questions/28331528/scala-enumerations-case-objects-in-slick-good-ractices –