Scala 我如何处理a>;使用嵌套元组或HLists的22列表格?

Scala 我如何处理a>;使用嵌套元组或HLists的22列表格?,scala,tuples,slick,scala-2.11,Scala,Tuples,Slick,Scala 2.11,我不熟悉Scala(使用2.10)和Slick(使用2.0-M2)。我发现,在Slick中绕过22列限制的方法之一是使用嵌套元组。我不知道怎么做,尽管我发现了 当前的开发分支Scala(2.11-M5)支持超过22个元素的case类,但不支持arity>22的元组。Slick还没有在Scala 2.11的预发行版中发布。我如何定义一个33列的表(并让它与所有Slick的语法糖一起工作) 注意,我正在尝试支持现有架构,无法更改表规范化。您链接到的测试代码已过时。如果不为表使用映射,则很简单:*的类

我不熟悉Scala(使用2.10)和Slick(使用2.0-M2)。我发现,在Slick中绕过22列限制的方法之一是使用嵌套元组。我不知道怎么做,尽管我发现了

当前的开发分支Scala(2.11-M5)支持超过22个元素的case类,但不支持arity>22的元组。Slick还没有在Scala 2.11的预发行版中发布。我如何定义一个33列的表(并让它与所有Slick的语法糖一起工作)


注意,我正在尝试支持现有架构,无法更改表规范化。

您链接到的测试代码已过时。如果不为表使用映射,则很简单:
*
的类型对应于查询表时得到的返回类型,无论是单元组、HList还是嵌套元组。自Slick 2.1以来,这适用于所有操作。(在2.0中,
*
投影不支持它,因此您必须定义一个替代投影并覆盖
create.*
)请参阅以获取HList示例

如果要将
*
投影映射到自定义类型,也可以将
运算符用作单个元组,但无法使用为case类自动生成的
元组方法和
方法,因此必须编写两个映射函数(从未映射到映射类型并返回)如图所示。请注意,Scala 2.11并没有改善这种情况。虽然它允许包含22个以上字段的case类,但对于arity>22,没有相应的
函数
类型,因此您仍然不能使用
tuple
unapply


作为编写这些函数的替代方法,您可以将与映射类型相对应的提升类型定义为。当您有嵌套的case类时(of这里我写了一篇文章来给出解决方案),这尤其有用。以下是链接:

我画了一些图表,用不同的颜色帮助你快速理解


总而言之,我使用额外的case类将一些列打包成一列,这不会影响实际的物理列。然后,当我们使用投影映射到自定义类型时,我们会涉及元组返回。这是一个黑客解决方案,但很容易修复Scala编程语言的限制,即元组大小应小于22。

帮助你,但是相关的(放在那里,因为如果有人会想出这个问题的答案,它也可以回答那个家伙)。这个相关的问题有很多有用的信息:我不能让这个自定义案例类映射(基于测试)工作。我在这里打开了一个相关的问题: