【问题标题】:Slick provide table schema name parameterSlick 提供表模式名称参数
【发布时间】:2021-08-13 20:50:45
【问题描述】:

如果我对架构名称进行硬编码,我可以创建一个 Slick 表,但如何将其作为参数传递?

下面的代码有效,但架构名称是硬编码的。由于我使用一种模式作为我的开发环境,而另一种模式用于生产,我想将模式名称作为参数传入。但是如果我在构造函数中添加第二个参数,我就不能再实例化这个类,因为我不知道如何获取slick.lifted.Tag 的实例。 (当构造函数只有一个参数 - 标记 - 值由宏自动提供。)

class SomeTableTbl(tag: Tag) extends Table[SomeRecord](tag, _schemaName = Some("MY_DEV_SCHEMA"), _tableName = "SOME_TABLE") {
  def record_id: Rep[Long] = column[Long]("RECORD_ID", O.PrimaryKey, O.AutoInc)

  def column_one: Rep[String] = column[String]("COLUMN_ONE")

  def column_two: Rep[String] = column[String]("COLUMN_TWO")

  def column_six: Rep[String] = column[String]("COLUMN_SIX")

  override def * : ProvenShape[SomeRecord] = (record_id, column_one, column_two, column_six) <> (SomeRecord.tupled, SomeRecord.unapply)
}

// works, "tag: slick.lifted.Tag" param is provided by some macro
lazy val tblQuery: TableQuery[SomeTableTbl] = TableQuery[SomeTableTbl]
// Now add constructor parameter: SomeTableTbl(tag: Tag, schemaName: String)
lazy val tblQuery: TableQuery[SomeTableTbl] = TableQuery[SomeTableTbl]("some_other_schema_name")
// Error: not enough arguments for constructor

如何向构造函数提供 schemaName 参数并创建此类的实例? 使用 Scala 2.12、Slick 3.3.0

【问题讨论】:

    标签: scala slick


    【解决方案1】:

    对象TableQuery 有两个方法apply 的变体。 One of them accepts a function from a tag to an instance of a table,所以以下应该可以工作:

    lazy val tblQuery: TableQuery[SomeTableTbl] =
      TableQuery(tag => new SomeTableTbl(tag, "other_schema_name"))
    

    【讨论】:

      猜你喜欢
      • 2020-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多