Sql 在Slick中选择多个任意列

Sql 在Slick中选择多个任意列,sql,scala,slick,Sql,Scala,Slick,我正在尝试对一个视图运行Slick中的SELECT*样式的查询。理想情况下,我最终会得到一个函数,您可以将一组列名作为Seq[String]传递,它将执行查询SELECT col1,col2。。。从视图。如果这不可行,那么可以只返回所有列(SELECT*FROM view) 我知道我可以通过为这个视图定义一个Table类以及一个附带的case类来实现这一点,但是其中一些视图有数百个列(这需要嵌套元组,因为元组有22个元素的限制),我必须为很多视图这样做,所以有很多代码需要编写/生成/维护。如果可

我正在尝试对一个视图运行Slick中的
SELECT*
样式的查询。理想情况下,我最终会得到一个函数,您可以将一组列名作为
Seq[String]
传递,它将执行查询
SELECT col1,col2。。。从视图
。如果这不可行,那么可以只返回所有列(
SELECT*FROM view

我知道我可以通过为这个视图定义一个
Table
类以及一个附带的case类来实现这一点,但是其中一些视图有数百个列(这需要嵌套元组,因为元组有22个元素的限制),我必须为很多视图这样做,所以有很多代码需要编写/生成/维护。如果可能的话,我想避免这种情况

这在光滑的地方可行吗?通过定义
类而不必在静态代码中定义列(可以使用动态列字符串列表初始化某个类),或者通过自己使用
SQL“…”
生成SQL查询并以某种方式获取
。as[…]
处理返回一组任意长度的列


我不需要对实际的列类型做任何特殊的处理:在数据库方面,我们有多种类型的混合,但是如果它们在光滑的一面都被视为文本列,那我就可以了。

光滑不适合您的要求

当您想要访问任意列时(例如通过使用列名称的
列表[String]
),您就失去了Slick提供的所有类型安全优势,因为它无法验证模式

这意味着您将不得不放弃Slick的表类,使用生成的SQL(使用
String
查询)寻找一个完全动态的解决方案


虽然Slick允许您手动编写SQL(请查看
StaticQuery.query
函数),但其他库更适合此任务。我建议大家看一下ScalikeJDBC。

有趣的问题,值得注意的是,新版本的slick中已删除了列限制。要跟进@EndeNeu的评论,请参阅。@ecoe没办法,因为我不再使用slick。抱歉。在
Slick 3.2.3
中,您可以使用或进行编译时检查。但是如果你需要更复杂的查询,这可能会变得棘手,正如上面的链接所示。这也是我们得出的结论。我们最终切换到了jOOQ,并且非常高兴。jOOQ与Scala集成的进展如何?(
选项
等等?)我们对jOOQ还是相当陌生的,所以我不能权威地回答这个问题,但我发现Scala集成是不错的,但不是很好。总的来说,jOOQ是一个非常令人印象深刻的ORM,它(有限的)Scala集成并没有阻碍我们。