Ho scritto questo codice che funziona perfettamenteSlick 3.0 Inserisci e quindi ottenere incremento automatico Valore
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)
}
}
Questo codice funziona, ma il valore di ritorno è il numero di record inseriti. Ma voglio restituire il valore di AutoInc dopo che l'inserimento è stato fatto.
ho fatto google e ho trovato alcuni articoli
Slick 3.0.0 AutoIncrement Composite Key
Returning the auto incrementing value after an insert using slick
Ma in qualche modo questi non rispondono alla domanda in modo pulito.
+1. Ho trovato che [Play-Slick-Silhouette] (https://github.com/sbrunk/play-silhouette-slick-seed) template Typesafe Activator è una buona introduzione su come usare Slick 3.0 in un'impostazione "reale" , ad esempio [qui] (https://github.com/sbrunk/play-silhouette-slick-seed/blob/master/app/models/daos/PasswordInfoDAO.scala) e [qui] (https: // github. com/sbrunk/play-silhouette-slick-seed/blob/master/app/models/daos/UserDAOImpl.scala), incluso il problema dell'identità restituita. –
Se potessi darti un aumento di 100+ lo farei. Questa è probabilmente la risposta più concisa a questa domanda che ho visto. –
questo può essere ovvio, ma io sono nuovo in slick/scala, in quale variabile è memorizzata la colonna autoincrement? come ottenerlo? – ps0604