【发布时间】:2014-09-19 23:13:24
【问题描述】:
我正在尝试在 Slick 中针对视图运行 SELECT * 样式的查询。理想情况下,我最终会得到一个函数,您可以将一组列名作为Seq[String] 传递,它会执行查询SELECT col1, col2, ... FROM view。如果这不可行,那么只返回所有列是可以接受的 (SELECT * FROM view)。
我知道我可以通过为此视图定义 Table 类以及随附的案例类来做到这一点,但是其中一些视图有数百列(这需要嵌套元组,因为有 22 个元素的限制在元组上),并且我必须为此执行许多视图,因此要编写/生成/维护很多代码。如果可能的话,我想避免这种情况。
这在 Slick 中可行吗?通过定义 Table 类而不必在静态代码中定义列(使用动态列字符串列表初始化某些类是可以接受的),或者仅使用 sql"""...""" 自己生成 SQL 查询并以某种方式获取 .as[...]处理返回一组任意长度的列?
我不需要对实际的列类型做任何特别的事情:在数据库端,我们有多种类型,但如果它们都被视为 Slick 端的文本列,那就没问题了和我一起。
【问题讨论】:
-
有趣的问题,就像一个注释,列限制现在在新版本的 slick 中被删除了。
-
要跟进@EndeNeu 的评论,请参阅slick.typesafe.com/doc/2.1.0/…。
-
@ecoe 很遗憾,因为我不再使用 slick。对不起。
-
在
Slick 3.2.3中,您可以通过select an arbitrary list of columns of the same type 或specify finite columns withOptiontypes 进行编译时检查。但是,如果您需要更复杂的查询,这可能会变得很棘手,如上面的链接所示。