3

我想编写我的 Scala+Slick 应用程序,以便用户可以为表配置额外的列,而无需修改源代码。有没有办法做到这一点?

Adam S - 是的,这就是我的想法。该程序将附带一个默认配置文件,最终用户/管理员可以选择将新列添加到某些表中,并且在程序启动时它会添加这些列。

我正在考虑其他一些方法,例如使用用户将配置的备用列配置初始表(但这会受到限制备用数量和预定义类型的影响)。另一种方法是定义第二个表,它与原始表具有相同的主键,并且只包含用户定义的数据,然后程序必须处理维护这两个表(每个表都有相同数量的行),这将允许更常规地处理原始默认表。这两个表可能与数据库函数保持同步(这将使其特定于数据库)。

4

1 回答 1

7

是的,这是可能的。当您将列定义为 Table 定义的一部分时,它是通过调用 Table 对象的 'column' 方法来完成的。您可以从外部执行相同的操作,例如:

for {
  a <- TableA
  b <- TableB if a.id === b.column[String]("dynamic1")
} yield b.column[Int]("dynamic2")

type 参数确定要用于列的正确隐式 ColumnType。您还可以动态获取 ColumnType 并显式提供该参数。

请注意,表的 * 投影不需要包含所有列。如果要为动态发现的列生成 DDL,可以将这些列包含在 create_* 返回的 Seq 中。

于 2013-05-06T09:53:16.893 回答