在光滑中将整数映射到对象

时间:2016-05-28 16:44:03

标签: scala playframework slick

我正在使用带有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
  ...

}

1 个答案:

答案 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)
}