在Slick 3.x中动态设置表名

时间:2016-07-03 23:36:17

标签: scala slick slick-3.0

我有两个相同的表,每个表都在不同的数据库中。此外,表格有不同的名称。

我已经在课程BankDB中硬编了表格的名称:

class BankDB(tag: Tag) extends Table[Bank](tag, "banks1") {

  def sk = column[Int]("sk", O.PrimaryKey)
  def name = column[String]("name")
 // other columns

根据数据库名称,我需要的是设置表的名称,如下所示:

 val tableName = if (dbName == "DB1") "banks1" else "banks2"

然后在TableQuery中使用tableName让Slick指向正确的表:

    val db = Database.forConfig(dbName)
    try {
      val banks = TableQuery[BankDB](tableName)  // <== this doesn't work
      val future = db.run(banks.filter(_.sk === sk).result)
      val result = Await.result(future, Duration.Inf)
      result
    } finally db.close

这可能吗?或者我需要定义类,每个数据库一个?

1 个答案:

答案 0 :(得分:0)

class BankDB(tag: Tag,tableName: String) extends Table[Bank](tag, tableName) 
def getTableQuery(tableName: String) = 
   TableQuery[BankDB]((t: slick.lifted.Tag) => new BankDB(t, tableName))