Slick 提供 table 架构名称参数
Slick provide table schema name parameter
如果我对模式名称进行硬编码,我可以创建一个 Slick table,但是我如何将它作为参数传递?
下面的代码有效,但架构名称是硬编码的。由于我使用一个模式作为我的开发环境,并使用不同的模式进行生产,所以我想传入模式名称作为参数。但是如果我在构造函数中添加第二个参数,我就不能再实例化class,因为我不知道如何获取slick.lifted.Tag
的实例。 (当构造函数只有一个参数 - 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 参数并创建此 class 的实例?
使用 Scala 2.12、Slick 3.3.0
对象 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"))
如果我对模式名称进行硬编码,我可以创建一个 Slick table,但是我如何将它作为参数传递?
下面的代码有效,但架构名称是硬编码的。由于我使用一个模式作为我的开发环境,并使用不同的模式进行生产,所以我想传入模式名称作为参数。但是如果我在构造函数中添加第二个参数,我就不能再实例化class,因为我不知道如何获取slick.lifted.Tag
的实例。 (当构造函数只有一个参数 - 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 参数并创建此 class 的实例? 使用 Scala 2.12、Slick 3.3.0
对象 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"))