Scala Slick 3.0中的继承实现
拥有case类+光滑表映射 很多类使用相同的字段,比如Scala Slick 3.0中的继承实现,scala,slick,slick-3.0,Scala,Slick,Slick 3.0,拥有case类+光滑表映射 很多类使用相同的字段,比如 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 =
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 {
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
您可以将这些字段提取到
特征
,该特征本身不必扩展表
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
为了能够使用
列
,您的特质必须知道它将混合到表
实例中:
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
为了能够使用
列
,您的特质必须知道它将混合到表
实例中:
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
考虑到抽象表实际上需要参数,也许抽象类是统一公共字段的更好选择
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 * = ...
}
考虑到抽象表实际上需要参数,也许抽象类是统一公共字段的更好选择
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 * = ...
}
这不起作用,因为
BasicT
没有column
方法。这不起作用,因为BasicT
没有column
方法。