gpt4 book ai didi

scala - Slick 3.0 Insert 然后获取 Auto Increment Value

转载 作者:行者123 更新时间:2023-12-03 08:46:49 24 4
gpt4 key购买 nike

我写了这段代码,它完美地工作

class Items(tag: Tag) extends Table[Item](tag, "ITEMS") {
def id = column[Long]("ITEMS_ID", O.PrimaryKey, O.AutoInc)
def name = column[String]("ITEMS_NAME")
def price = column[Double]("ITEMS_PRICE")
def * = (id, name, price) <> ((Item.apply _).tupled, Item.unapply _)
}

object Shop extends Shop{
val items = TableQuery[Items]
val db = Database.forConfig("h2mem1")

def create(name: String, price: Double) : Int = {
val action = items ++= Seq(Item(0, name, price))
val future1 = db.run(action)
val future2 = future1 map {result =>
result map {x => x}
}
Await.result(future2, Duration.Inf).getOrElse(0)
}
}

此代码有效,但返回值是插入的记录数。但我想在插入完成后返回 AutoInc 的值。

我做了谷歌,发现了几篇文章

Slick 3.0.0 AutoIncrement Composite Key

Returning the auto incrementing value after an insert using slick

但不知何故,这些并没有干净地回答这个问题。

最佳答案

这是relevant documentation page , 据此,你应该构造一个这样的查询:

val insertQuery = items returning items.map(_.id) into ((item, id) => item.copy(id = id))

def create(name: String, price: Double) : Future[Item] = {
val action = insertQuery += Item(0, name, price)
db.run(action)
}

关于scala - Slick 3.0 Insert 然后获取 Auto Increment Value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31443505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com