【发布时间】: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
【问题讨论】: