1

有案例类+光滑的表映射。

许多类使用相同的字段,例如

class T1(tag: Tag) extends Table[caseClassA](tag, "A") {
  def id = column[Option[Long]]("ID", O.PrimaryKey, O.AutoInc)

  def id1 = column[Long]("ID1", O.NotNull)

  def id2 = column[String]("ID2", O.NotNull)

  def idn = column[String]("IDn", O.NotNull)
}


class T2(tag: Tag) extends Table[caseClassB](tag, "B") {
  def id = column[Option[Long]]("ID", O.PrimaryKey, O.AutoInc)

  def id1 = column[Long]("ID1", O.NotNull)

  def id2 = column[String]("ID2", O.NotNull)

  def idn = column[String]("IDn", O.NotNull)
}

我怎样才能移动id, id1, id2, idn到根线程?

试过了

trait BasicT extends Table {
...
}

没有成功,有什么想法吗?

BR!

4

3 回答 3

0

考虑到抽象表实际上是带参数的,也许抽象类是统一公共字段的更好选择。

abstract class BasicTable[T](tag: Tag, tableName: String) 
    extends Table[T](tag, tableName) {

    def id = column[Option[Long]]("ID", O.PrimaryKey, O.AutoInc)

    def id1 = column[Long]("ID1")

    def id2 = column[String]("ID2")

    def idn = column[String]("IDn")

}

class T1(tag: Tag) extends BasicTable[caseClassA](tag, "A") {
    ...
    override def *  = ...
}
于 2015-09-07T12:14:29.710 回答
0

您可以将这些字段提取到一个trait中,它本身不必扩展Table

trait BasicT {
  def id = column[Option[Long]]("ID", O.PrimaryKey, O.AutoInc)

  def id1 = column[Long]("ID1", O.NotNull)

  def id2 = column[String]("ID2", O.NotNull)

  def idn = column[String]("IDn", O.NotNull)
}

class T1(tag: Tag) extends Table[caseClassA](tag, "A") with BasicT

class T2(tag: Tag) extends Table[caseClassB](tag, "B") with BasicT
于 2015-09-07T09:41:47.533 回答
0

为了能够使用column您的特征,必须知道它将混合到Table实例中:

trait BasicT {
  self: Table[_] =>

  def id = column[Option[Long]]("ID", O.PrimaryKey, O.AutoInc)

  def id1 = column[Long]("ID1", O.NotNull)

  def id2 = column[String]("ID2", O.NotNull)

  def idn = column[String]("IDn", O.NotNull)
}

class T1(tag: Tag) extends Table[caseClassA](tag, "A") with BasicT
class T2(tag: Tag) extends Table[caseClassB](tag, "B") with BasicT
于 2015-09-07T11:42:35.813 回答