如何获取使用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" )))
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Slick 0.11.2 for Scala 2.10.0-RC1
Kaz*_*era 11
您可以像这样检索生成的值.
将autoInc方法添加到Users对象.
def autoInc = id.?~first~last <>(User,User.unapply _)返回id
请Users.autoInc.insert改用.
print(Users.autoInc.insert(User(None,"Jack","Green")))
也可以看看:
https://github.com/slick/slick/issues/10
https://github.com/slick/slick/commit/09a65a8e88a0363412e218dc5c06023b69809649
最新版本的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")
Run Code Online (Sandbox Code Playgroud)
这是完整的monty,然后将检索到的值插回到要添加到表中的对象中.如果你只是想亲自动手身份:
val userId =
(users returning users.map(_.id)) += User(None, "Stefan", "Zeiger")
Run Code Online (Sandbox Code Playgroud)
这两个代码片段都来自官方文档.看起来这个问题需要更新给那些从未使用早期版本的Slick的新手(比如我).
| 归档时间: |
|
| 查看次数: |
9738 次 |
| 最近记录: |