相关疑难解决方法(0)

斯卡拉光滑的方法到目前为止我无法理解

我尝试了解一些Slick的作品以及它需要什么.

这是一个例子:

package models

case class Bar(id: Option[Int] = None, name: String)

object Bars extends Table[Bar]("bar") {
  def id = column[Int]("id", O.PrimaryKey, O.AutoInc)

  // This is the primary key column
  def name = column[String]("name")

  // Every table needs a * projection with the same type as the table's type parameter
  def * = id.? ~ name <>(Bar, Bar.unapply _)
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下*这里方法的目的是什么<>,为什么unapply?什么是Projection - 方法~'返回实例Projection2

scala magic-methods scalaquery playframework-2.0 slick

88
推荐指数
2
解决办法
2万
查看次数

如何使用新的Slick 2.0 HList克服22列限制?

我目前正在编写Slick代码来定位具有两个表> 22列的旧模式.如何使用新的HList代码?在Scala 2.10.3下,我在其他方面有2.0-M3正常工作.这是我目前使用的案例类/元组的语法.如何使用文档中提到的新HList?

  case class Joiner(
      id: Int,
      name: Option[String],
      contact: Option[String]
  )

  class Joiners(tag: Tag) extends Table[Joiner](tag, "joiner") {
    def id = column[Int]("id", O.PrimaryKey, O.AutoInc, O.DBType("int(11)"))
    def name = column[Option[String]]("name", O.DBType("varchar(255)"))
    def contact = column[Option[String]]("contact", O.DBType("text"))
    def * = (id, name.?, contact.?) <> (Joiner.tupled, Joiner.unapply)
  }
  val joiners = TableQuery[Joiners]
Run Code Online (Sandbox Code Playgroud)

我在示例中没有看到任何内容,只是在最新更新的文档中提及了一下.我是Scala和Slick的新手.

scala tuples hlist slick

15
推荐指数
1
解决办法
4077
查看次数

在Slick中自定义映射到嵌套的case类结构(超过22列)

我正在尝试将超过22列的数据库行映射到案例类树.我宁愿不使用HList,因为我不想使用该API,还有一些我在某处读过的指数编译时间反馈......

我已经读过Stefan Zeiger回答的这个帖子:如何使用嵌套元组或HLists处理带有Slick的> 22列表?

我已经看过这个测试,它展示了如何定义自定义映射函数,我想这样做:

https://github.com/slick/slick/blob/2.1/slick-testkit/src/main/scala/com/typesafe/slick/testkit/tests/JdbcMapperTest.scala#L129-141

def * = (
        id,
        (p1i1, p1i2, p1i3, p1i4, p1i5, p1i6),
        (p2i1, p2i2, p2i3, p2i4, p2i5, p2i6),
        (p3i1, p3i2, p3i3, p3i4, p3i5, p3i6),
        (p4i1, p4i2, p4i3, p4i4, p4i5, p4i6)
      ).shaped <> ({ case (id, p1, p2, p3, p4) =>
        // We could do this without .shaped but then we'd have to write a type annotation for the parameters
        Whole(id, Part.tupled.apply(p1), Part.tupled.apply(p2), Part.tupled.apply(p3), Part.tupled.apply(p4))
      }, { w: Whole =>
        def f(p: Part) = Part.unapply(p).get …
Run Code Online (Sandbox Code Playgroud)

scala slick

12
推荐指数
2
解决办法
7213
查看次数

我可以在Scalding map方法中输出集合而不是元组吗?

如果要在Scalding中创建一个包含超过22个字段的管道,则受Scala元组的限制,Scala元组的数量不能超过22个.

有没有办法使用集合而不是元组?我想象下面的例子,遗憾的是它不起作用:

input.read.mapTo('line -> aLotOfFields) { line: String =>
  (1 to 24).map(_.toString)
}.write(output)
Run Code Online (Sandbox Code Playgroud)

scala scalding

7
推荐指数
1
解决办法
1758
查看次数