Utilizzando Anorm Play Framework, come recuperare l'ID generato automaticamente per un inserimento?
-
10-12-2019 - |
Domanda
Supponiamo che io abbia:
case class SomeModel(
id : Pk[Long],
description : String
)
object SomeModel extends Magic[SomeModel] {
def ayDogAy = {
var aydog = SomeModel(NotAssigned, "aydog")
this.insert(aydog)
}
}
.
Come posso recuperare l'ID inserito di AyDog?
Se importa, il mio database di supporto è postgres
Soluzione
In Play 2 se hai un PK lungo Autoincrement:
val id: Long = SQL("insert into bla bla bla").on("bleh", "blah").executeInsert().get
. Altri suggerimenti
Non uso il tratto magico (come viene rimosso in gioco 2.0), quindi non sono sicuro se funziona anche questo.In SQL è possibile utilizzare Scope_Identity () per ottenere l'ultimo ID utilizzato sulla connessione.Quindi puoi farlo come
val id = SQL("SELECT SCOPE_IDENTITY()")().collect {
case Row(id: Int) => id
}.head
new SomeModel(new Id(id), "aydog")
.
Sto solo giocando con il gioco in questo momento.Quindi questo non è niente che consiglierei di utilizzare in produzione senza ulteriori indagini.Sono particolarmente sicuro se potrebbero esserci problemi di concorrenza, quando diversi thread utilizzano il metodo AyDogay.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow