我想编写我的Scala + Slick应用程序,以便用户可以在不必修改源代码的情况下为表配置其他列。有没有办法做到这一点?
亚当S - 是的,这就是我的想法。该程序将带有一个默认配置文件,最终用户/管理员可以选择在某些表中添加新列,当程序启动时,它会添加这些列。我还有其他一些方法可以考虑,例如使用用户将配置的备用列配置初始表(但这会限制备件数量并预先定义类型)。另一种方法是定义第二个表与原始主键具有相同的主键,并使其仅包含用户定义的数据,然后程序必须处理维护两个表(每个表具有相同的数量)行),这将允许更传统地处理原始默认表。这两个表可能与数据库函数保持同步(这将使数据库具体化)。
答案 0 :(得分:7)
是的,这是可能的。将列定义为表定义的一部分时,可以通过调用Table对象的“列”方法来完成。你可以从外面做同样的事情,例如:
for {
a <- TableA
b <- TableB if a.id === b.column[String]("dynamic1")
} yield b.column[Int]("dynamic2")
type参数确定要用于列的右隐式ColumnType。您还可以动态获取ColumnType并显式提供该参数。
请注意,表格的*投影不需要包含所有列。如果要为动态发现的列生成DDL,可以在create _ *返回的Seq中包含这些列。