使用Slick(Scala),有没有办法在运行中向表中添加列?

use*_*589 3 scala slick

我想编写我的Scala + Slick应用程序,以便用户可以在不必修改源代码的情况下为表配置其他列.有没有办法做到这一点?

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

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

sze*_*ger 7

是的,这是可能的.将列定义为表定义的一部分时,可以通过调用Table对象的"列"方法来完成.你可以从外面做同样的事情,例如:

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

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

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