Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何在Slick中参数化表名_Scala_Slick - Fatal编程技术网

Scala 如何在Slick中参数化表名

Scala 如何在Slick中参数化表名,scala,slick,Scala,Slick,问题 我不希望有一个硬编码的表名,而是希望使表名成为动态的 我想更改insert方法,使其接受year(int)参数,并根据year参数选择正确的表。i、 e.如果传入的年份为1970,则表名为1970表,但如果传入的年份为1980,则表名为1980表 val myRepository = new MyRepository(dbConfig) myRepository.insert(myrecord) TableQuery中有两个apply方法val myTable=TableQue

问题

我不希望有一个硬编码的表名,而是希望使表名成为动态的

我想更改
insert
方法,使其接受
year(int)
参数,并根据year参数选择正确的表。i、 e.如果传入的年份为
1970
,则表名为
1970表
,但如果传入的年份为
1980
,则表名为
1980表

  val myRepository = new MyRepository(dbConfig)

  myRepository.insert(myrecord)

TableQuery中有两个
apply
方法
val myTable=TableQuery[myTable]
-
这一个使用宏来创建
MyTable
。 另一个定义如下:

class MyTable(tag: Tag) extends Table[MyEntity](tag, "1970Table") {
  def id = column[Int]("id")

  override def * = 
  (
   id
  ) <> (MyEntity.tupled, MyEntity.unapply)
}

val myTable = TableQuery[MyTable]

class MyRepository(val config: DatabaseConfig[JdbcProfile])
   extends MyRepository[MyTable, String] {
  override val table: config.profile.api.TableQuery[MyTable] = myTable

  def insert(me: MyEntity): Future[Int] = {
     db.run(table += me)
  }
}
val myRepository = new MyRepository(dbConfig)
myRepository.insert(myrecord, "1970")
现在,您可以预定义所有需要的表并使用它们,或者像这样执行smth

class MyTable(tag: Tag, tableName: String) extends Table[MyEntity](tag, tableName)
...
def myTable(name: String) = TableQuery[MyTable](tag =>  new MyTable(tag, name))

您是否尝试向
MyTable
类添加另一个参数,如
name
,并将其进一步传递给Slick Table。然后在
MyRepository
中为1980表格再创建一个变量,并选择在插入方法中使用哪一个?在
MyRepository
中的
table
变量将覆盖
table
变量。因此,我无法添加多个
变量。请详细说明
表1970
表1980
在您的答案中所指的内容……无法理解它们在问题示例中的适用性。感谢我对这种方法的关注是,它将要求我复制粘贴我将制作的每个
表1970
表1978
,等等类的代码,因为插入/删除/etc方法每年都是相同的。唯一改变的是表名。
def apply[E <: AbstractTable[_]](cons: Tag => E): TableQuery[E] =
    new TableQuery[E](cons)
class MyTable(tag: Tag, tableName: String) extends Table[MyEntity](tag, tableName)
...
def myTable(name: String) = TableQuery[MyTable](tag =>  new MyTable(tag, name))
class MyRepository(val config: DatabaseConfig[JdbcProfile])
   extends MyRepository[MyTable, String] {
  override def table(year: Int): config.profile.api.TableQuery[MyTable] = myTable(year.toString)

  def insert(me: MyEntity, year: Int): Future[Int] = {
     db.run(table(year) += me)
  }
}