Utilizzando Anorm Play Framework, come recuperare l'ID generato automaticamente per un inserimento?

StackOverflow https://stackoverflow.com//questions/9641553

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

È stato utile?

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
scroll top