如何在Scala中使用Sleick库获取自动增量值

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (41)

如何获得用Slick插入的记录的自动递增值?下面的代码输出1111. 我会期望它输出1234

import scala.slick.driver.H2Driver.simple._

object TestMappedTable extends App{
    case class User(id: Option[Int], first: String, last: String)

    object Users extends Table[User]("users") {
        def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
        def first = column[String]("first")
        def last = column[String]("last")
        def * = id.? ~ first ~ last <> (User, User.unapply _)
    }

  implicit val session = Database.forURL("jdbc:h2:mem:test1", driver = "org.h2.Driver").createSession()
  session.withTransaction{
    Users.ddl.create

    print(Users.insert(User(None, "Jack", "Green" )))
    print(Users.insert(User(None, "Joe", "Blue" )))
    print(Users.insert(User(None, "John", "Purple" )))
    print(Users.insert(User(None, "Jim", "Yellow" )))
  }
}

我为Scala 2.10.0-RC1使用Slick 0.11.2

提问于
用户回答回答于

你可以像这样检索生成的值。

autoInc方法添加到Users对象。

def autoInc = id。?〜first〜last <>(User,User.unapply _)返回id

Users.autoInc.insert改为使用。

print(Users.autoInc.insert(User(None,“Jack”,“Green”)))

用户回答回答于

最新版本的Slick(2.1.0)会自动忽略自动递增的ID,文档将演示如何检索ID:

val userWithId =
  (users returning users.map(_.id)
         into ((user,id) => user.copy(id=Some(id)))
  ) += User(None, "Stefan", "Zeiger")

这是完整的monty,然后将检索到的值插回到要添加到表中的对象中。:

val userId =
  (users returning users.map(_.id)) += User(None, "Stefan", "Zeiger")

这两个代码片段都来自官方文档。看起来像这个问题需要更新从未使用早期版本的Slick的新手(如我)。

扫码关注云+社区