我正在使用带有scala和play的slick 3,我想知道如何在表定义中将ID转换为对象。
假设我有一个类似于Java中Enum的值列表,并且数据库中的ID必须与Enum中定义的ID相对应。它类似于在数据库中拥有另一个通过该ID引用的表。
object X extends Table[(Int, String)]("x") {
...
def typeId = column[Int]("type_id")
def type = ... (AAA or BBB) // filled in by type_id
...
}
答案 0 :(得分:0)
在Slick中,您可以从数据库中的数据到对象再定义自己的投影(而不是通常的应用/取消应用案例类)。您还可以使用String在数据库中定义类型。
您的类型可能如下所示:
sealed trait X
case class AAA() extends X
case class BBB() extends X
然后您的Slick映射可能如下所示:
object Xs extends Table[X]("X") {
def typeName = column[String]("TYPE_NAME")
def toX(from: (String)): X = from match {
case ("aaa") => AAA
case ("bbb") => BBB
}
def fromX(x: X): (String) = x match {
case AAA => ("aaa")
case BBB => ("bbb")
}
override def * = (typeId) <> (toX, fromX)
}