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