5

我正在使用 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)

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

请帮我将此案例类映射到表格。

4

3 回答 3

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

于 2015-04-27T04:27:30.853 回答
0

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

请参考这个测试用例。

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

于 2014-07-14T12:51:07.077 回答
0

我有一个 HListCaseClassShape ,它的工作原理与 CaseClassShape 完全相同,但没有 22 列限制:here。然后,您可以像这样将它映射到您的表:(请参见此处def * = MyHListCaseClassShape(f1, f2, f3...)的 Pair * 示例)。不确定它是否适用于 Slick 2,但可能值得一试。

于 2016-11-21T21:29:08.797 回答