通过Slick 2.1.0将超过22列的映射到Scala案例类

时间:2014-07-13 15:53:41

标签: scala playframework slick playframework-2.3 scala-2.11

我使用的是Scala 2.11,Slick 2.1.0-M2,PlayFramework 2.3.1。

我需要将25列表映射到Scala的案例类。

例如我有这个案例类:

case class Test(f1: Long, f2: String, f3: String, f4: String, f5: String, 
                f6: String, f7: String, f8: String, f9: String, f10: String, 
                f11: String, f12: String, f13: String, f14: String, f15: String, 
                f16: String, f17: String, f18: String, f19: String, f20: String, 
                f21: String, f22: String, f23: Float, f24: Float, f25: String)

我读到可以编写自定义Shapeproof),但我实现它的任何尝试都失败了。

请帮我把这个案例类映射到表格。

3 个答案:

答案 0 :(得分:0)

对于当前的光滑版本,这个问题没有一个很好的解决方案。您可以将一些字段打包到一个案例类中。

请参考此测试用例。

https://github.com/slick/slick/blob/2.1.0-RC1/slick-testkit/src/main/scala/com/typesafe/slick/testkit/tests/JdbcMapperTest.scala#L99

答案 1 :(得分:0)

实际上这可以通过HList这样来完成

def * = (col1 :: col2 :: .. :: HNil).shaped <> (
{ case x => new YYY(x(0), x(1), ..)}, 
{ x: YYY => Option(x.col1 :: x.col2 :: .. :: HNil)}
)

我写了一个宏来做映射,你可以看看这个 https://github.com/jilen/slickext

答案 2 :(得分:0)

我有一个与CaseClassShape完全相同但没有22列限制的HListCaseClassShape that workshere。然后,您可以将其映射到您的表格,如下所示:<li ...>(请参阅配对*示例here)。不确定它是否适用于Slick 2,但可能值得一试。