首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Scala中使用Slick库获取自动增量值

在Scala中使用Slick库获取自动增量值
EN

Stack Overflow用户
提问于 2012-10-29 07:51:00
回答 3查看 10.1K关注 0票数 17

如何获得使用Slick插入的记录的自动增量值?下面的代码打印1111。我本以为它会打印1234

代码语言:javascript
复制
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" )))
  }
}

我将Slick 0.11.2用于Scala 2.10.0-RC1

EN

回答 3

Stack Overflow用户

发布于 2014-12-05 18:55:02

最新版本的Slick (2.1.0)会自动处理ignoring the auto-incremented ids,文档演示了如何检索id:

代码语言:javascript
复制
val userWithId =
  (users returning users.map(_.id)
         into ((user,id) => user.copy(id=Some(id)))
  ) += User(None, "Stefan", "Zeiger")

这是完整的monty,然后将检索到的值插入到要添加到表中的对象中。如果您只想获得id本身:

代码语言:javascript
复制
val userId =
  (users returning users.map(_.id)) += User(None, "Stefan", "Zeiger")

这两个代码片段都取自官方文档。对于从来没有使用过Slick早期版本的新手(比如我)来说,这个问题似乎需要更新。

票数 9
EN

Stack Overflow用户

发布于 2013-12-11 12:53:56

根据SLICK Inserting document的说法,你应该定义一个forInsert看起来像这样的方法:

代码语言:javascript
复制
def forInsert = first ~ last <> (
    { t =>
        User(None, t._1, t._2)},
    { (u: User) =>
        Some((u.first, u.last))
    }) returning id

要获得结果:

代码语言:javascript
复制
def save(user: User): User = {
    val id = users.forInsert.insert(user)
    new User(Some(id), user.first, user.last)
}
票数 0
EN

Stack Overflow用户

发布于 2015-08-31 20:49:21

对我来说,下面的源码起作用了(Slick 3.0.2)

代码语言:javascript
复制
class Track(tag: Tag)
   extends Table[(Int, String, String)](tag, "TRACK") {
   // This is the primary key column:
   def id: Rep[Int] = column[Int]("ID", O.PrimaryKey, O.AutoInc)
   def artist: Rep[String] = column[String]("ARTIST")
   def name: Rep[String] = column[String]("NAME")

   def * : ProvenShape[(Int, String, String)] =
     (id, artist, name)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13114255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档