scala - Slick 3.0 Insertar y luego obtener Auto Incrementar valor
slick-3.0 (1)
Aquí está la página de documentación relevante , según la cual, debe construir una consulta como esta:
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)
}
He escrito este código que funciona perfectamente.
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)
}
}
Este código funciona pero el valor de retorno es el número de registros insertados. Pero quiero devolver el valor de AutoInc después de que se haya realizado la inserción.
hice google y encontré pocos artículos
Slick 3.0.0 AutoIncrement Composite Key
Devolviendo el valor de incremento automático después de una inserción usando slick
Pero de alguna manera estos no responden a la pregunta limpiamente.