【问题标题】:Slick 2.0 MultiDBCakeExample AutoInc "into" functionSlick 2.0 MultiDBCakeExample AutoInc“进入”功能
【发布时间】:2014-02-22 21:04:40
【问题描述】:

我发现了很多关于“旧”AutoInc 功能如何工作的旧帖子,但几乎没有关于新 AutoInc 功能如何实际工作的帖子。

https://github.com/slick/slick-examples/blob/master/src/main/scala/com/typesafe/slick/examples/lifted/MultiDBCakeExample.scala

使用 User 和 Picture 定义了两个私有 AutoInc 函数:

private val picturesAutoInc = pictures 
    returning pictures.map(_.id) into { case (p, id) => p.copy(id = id) }

private val usersAutoInc = users.map(u => (u.name, u.pictureId)) 
    returning users.map(_.id) into {
    case (_, id) => id
}

我在http://slick.typesafe.com/doc/2.0.0/queries.html#inserting上找到了returning方法

但是这个into 函数是什么?它有什么作用?它包含什么?

这是我的课,我应该如何编写自己的 autoInc?

  case class Label (id: Option[Int] = None, tag_name: String)

  class Labels (tag: Tag) extends Table[Label](tag, "Labels") {
    def id = column[Option[Int]]("TAG_ID", O.PrimaryKey, O.AutoInc)
    def tag_name = column[String]("TAG_NAME")

    def * = (id, tag_name) <> (Label.tupled, Label.unapply _)
  }

【问题讨论】:

    标签: scala slick


    【解决方案1】:

    它允许您将插入的值和生成的键映射到所需的目标值。

    直到现在它还没有被记录。我用文档创建了一个 PR:https://github.com/slick/slick/pull/687

    还要注意对应的单元测试:https://github.com/slick/slick/blob/master/slick-testkit/src/main/scala/com/typesafe/slick/testkit/tests/InsertTest.scala#L59

    【讨论】:

    • 如果case (p, id)是插入的值,如果我们要为一个大表插入超过10个值怎么办??
    • 我不确定您是否理解您的问题。你给into 的函数的第一个参数是你给slick 插入的值。如果您调用someTable.insert(a,b,c),它实际上会自动元组到someTable.insert((a,b,c)),这意味着您将获得 (a,b,c) 作为值。希望这能回答您的问题。
    猜你喜欢
    • 2014-03-20
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多