【问题标题】:Setting the table name dynamically in Slick 3.x在 Slick 3.x 中动态设置表名
【发布时间】:2018-07-04 09:53:42
【问题描述】:

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

我已经在 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

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

【问题讨论】:

  • 看看here。此外,对于表名,您可以使用 tableName: String 参数化 DAO 类,例如...

标签: scala slick slick-3.0


【解决方案1】:
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))

【讨论】:

  • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-15
  • 2014-03-05
相关资源
最近更新 更多