我试图在Slick中针对视图运行SELECT *
样式的查询。理想情况下,我最终会得到一个函数,您可以将一组列名称作为Seq[String]
传递,并执行查询SELECT col1, col2, ... FROM view
。如果这不可行,则只需返回所有列(SELECT * FROM view
)即可接受。
我知道我可以通过为这个视图定义一个Table
类以及一个附带的case类来做到这一点,但是其中一些视图有数百列(这需要嵌套元组,因为那里有&#39} ;元组的元素限制为22,并且我必须执行此操作的许多视图,以便编写/生成/维护许多代码。如果可能的话,我想避免这种情况。
这在Slick中可行吗?通过定义Table
类而不必在静态代码中定义列(使用动态列字符串列表初始化某些类是可接受的),或者仅使用sql"""..."""
生成SQL查询并以某种方式获取.as[...]
处理返回一组任意长度的列?
我不需要对实际的列类型做任何特殊的事情:在数据库方面,我们有各种类型的混合,但是如果他们在Slick上都被视为文本列这一方对我没问题。
答案 0 :(得分:3)
光滑不适合您的要求。
当您想要访问任意列时(例如,使用List[String]
列名称),您将失去Slick提供的所有类型安全优势,因为它无法验证架构。
这意味着您必须抛弃Slick的表类,并使用生成的SQL(使用String
查询)寻求完全动态的解决方案。
虽然Slick允许您手动编写SQL(查看StaticQuery.query
函数),但其他库更适合该任务。我建议看看ScalikeJDBC。