以下代码编译
import slick.jdbc.PostgresProfile.api._
trait Name
object Name {
case class Ordinary(s: String) extends Name
case class Manager(s: String) extends Name
case object NoName extends Name
}
case class Person(id: Long, name: Name, age: Int, isValid: Boolean)
class Persons(tag: Tag) extends Table[Person](tag, "persons") {
def id = column[Long]("id", O.PrimaryKey)
def name = column[String]("name")
def age = column[Int]("age")
def * = (id, name, age) <> ({
case (l, "NoName", i) => Person(l, Name.NoName, i, true)
case (l, s, i) if s.startsWith("Mgr.") => Person(l, Name.Manager(s.stripPrefix("Mgr.")), i, true)
case (l, s, i) => Person(l, Name.Ordinary(s), i, true)
}, (p: Person) => p.name match {
case Name.Ordinary(s) => Some((p.id, s, p.age))
case Name.Manager(s) => Some((p.id, "Mgr." + s, p.age))
case Name.NoName => Some((p.id, "NoName", p.age))
})
}
这里我们将isValid 设置为一个常量值并将name 映射到枚举。