如何解决Slick 提供表架构名称参数
如果我对架构名称进行硬编码,我可以创建一个 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
解决方法
对象 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"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。