一个scala函数,返回两种类型的slick tablequery中的一种

jaql4c8m  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(328)

假设我有以下特点。

trait ModelTrait{
  def id: Option[Long]
  def name: String
}

我有两张table。它们的case类和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
}

请注意 modelOneTableTableQuery[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语句中出现了类型不匹配错误。有人能帮忙吗?

eagi6jfj

eagi6jfj1#

您需要为其他字符串指定case子句:

which match {
   case "One" => modelOneTable
   case "Two" => modelTwoTable
   case _ => ... // which TableQuery should be returned for other strings
}

相关问题