Slick 3.0 Insert a następnie get Auto Increment Value
Napisałem ten kod, który działa doskonale
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)
}
}
Ten kod działa, ale wartością zwracaną jest liczba wstawionych rekordów. Chcę jednak zwrócić wartość AutoInc po wykonaniu wstawki.
Zrobiłem google i znalazłem kilka artykułów
Slick 3.0.0 AutoIncrement Composite Key
Zwracanie wartości automatycznego zwiększania po wstawce za pomocą slick
Ale jakoś nie odpowiadają na pytanie czysto.
29
1 answers
Oto odpowiednia strona dokumentacji, zgodnie z którą należy skonstruować zapytanie takie jak:
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)
}
53
Author: dcastro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-11 11:28:28
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-11 11:28:28