1

我有很多领域的案例类

 case class H(     
                           id: Int, 
                           min: Option[String] = None,
                           max: Option[String] = None,
                           step: Option[String] = None,
                           ...
                           ) 

如何将一些字段映射到表格?

class TH(tag: Tag) extends Table[H](tag, "H") {
  def id = column[Long]("ID", O.PrimaryKey, O.AutoInc)
  def min = column[Option[String]]("M")

  def * = (id, min) <>(H.tupled, H.unapply)
}

当我这样尝试时 - def * = (id, min) <>(H.tupled, H.unapply)不是映射所有字段,而是得到编译异常。我可以将自定义字段映射到表格吗?

BR!

4

1 回答 1

2

tupled并且unapply只是由案例类生成的基础函数,它使用案例类的所有字段定义了以下函数(除其他外)。

例如,对于一个案例类X(a: A, b: B, c: C, d: D),您有:

def tupled(a: a, b: b, c: c, d: d): X
def unapply(x: X): Option[(A, B, C, D)]

另一方面,您使用<>期望参数构造的投影:(f: (U => R), g: (R => Option[U]))U您的字段类型的组合在哪里。

如果它们不符合您的需求,您不必使用“自动”元组/取消应用,您可以提供自己的定义:

class TH(tag: Tag) extends Table[H](tag, "H") {
  def id = column[Long]("ID", O.PrimaryKey, O.AutoInc)
  def min = column[Option[String]]("M")

  def * = (id, min) <> (
    { tuple: (Long, Option[String]) => TH(id, min) },
    { th: TH => Some((th.id, th.min)) }
  )
}
于 2015-09-03T07:53:45.720 回答