【发布时间】:2018-06-12 11:43:21
【问题描述】:
假设我有以下特质。
trait ModelTrait{
def id: Option[Long]
def name: String
}
我有两张桌子。他们的案例类和tableQuery字段如下所示。
val modelOneTable = TableQuery[ModelOnes]
val modelTwoTable = TableQuery[ModelTwos]
case class ModelOne(id: Option[Long], name: String) extends ModelTrait
case class ModelTwo(id: Option[Long], name: String) extends ModelTrait
我想创建一个函数,根据它的输入,返回 tableQuery 字段之一。像这样的:
def getTableQuery(which: String): TableQuery[Table[ModelTrait]] = {
which match {
case "One" => modelOneTable
case _ => modelTwoTable
}
请注意,modelOneTable 是 TableQuery[ModelOnes]。 ModelOnes(带 s)类扩展 Table[ModelOne]。 ModelTwo 也是如此。因此函数返回TableQuery[Table[ModelTrait]]。
class ModelOnes(tag: Tag) extends Table[ModelOne](tag, "modelOnes") {
// ...
}
class ModelTwos(tag: Tag) extends Table[ModelTwo](tag, "modelTwos") {
// ...
}
但我的 case 语句中出现类型不匹配错误。有人可以帮忙吗?
【问题讨论】:
-
TableQuery定义在哪里? -
@giorgio-b 这是一个 Slick 库类。您可以将其作为依赖项添加到您的
build.sbt文件"com.typesafe.slick" %% "slick" % "3.2.3" -
我认为这是不可能的,因为 Table 类是不变的
abstract class Table[T](_tableTag: Tag, ...。如果它是协变的,就像class Table[+T]