Usando o Framework Play Anorm, como faço para obter o auto-id gerado para inserir?
-
10-12-2019 - |
Pergunta
Suponha que eu tenha:
case class SomeModel(
id : Pk[Long],
description : String
)
object SomeModel extends Magic[SomeModel] {
def ayDogAy = {
var aydog = SomeModel(NotAssigned, "aydog")
this.insert(aydog)
}
}
Como posso obter novamente inserido identificação de aydog?
Se isso importa, meu backup do banco de dados é Postgres
Solução
No Play 2 se você tiver um autoincrement longo PK:
val id: Long = SQL("insert into bla bla bla").on("bleh", "blah").executeInsert().get
Outras dicas
Eu não uso a Magia característica (como ele é removido no Play 2.0), então eu não tenho certeza se isso funciona aqui também.Em SQL você pode usar SCOPE_IDENTITY() para obter o último id a ser utilizado na conexão.Assim, você pode fazer somehing como
val id = SQL("SELECT SCOPE_IDENTITY()")().collect {
case Row(id: Int) => id
}.head
new SomeModel(new Id(id), "aydog")
Eu estou apenas brincando com o Jogo agora.Então, isso não é nada, eu recomendo usar em produção, sem mais investigações.Eu estou especialmente certeza de que pode haver problemas de simultaneidade, quando vários threads usar o ayDogAy método.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow