【问题标题】:Using Slick (Scala), is there a way to add a column to a table 'on the fly'?使用 Slick (Scala),有没有办法“动态”向表中添加列?
【发布时间】:2013-05-03 23:48:36
【问题描述】:

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

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

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

【问题讨论】:

  • 这个问题很模糊。据我所知:您能否将表信息写入外部文件并在构建表时评估该文件?

标签: scala slick


【解决方案1】:

是的,这是可能的。当您将列定义为 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 中。

【讨论】:

    猜你喜欢
    • 2021-12-18
    • 2021-05-24
    • 1970-01-01
    • 2021-09-11
    • 2020-03-20
    • 2021-10-17
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    相关资源
    最近更新 更多