Использование Play Framework Anorm, как получить автоматическую идентификатор для вставки?
-
10-12-2019 - |
Вопрос
Предположим, у меня есть:
case class SomeModel(
id : Pk[Long],
description : String
)
object SomeModel extends Magic[SomeModel] {
def ayDogAy = {
var aydog = SomeModel(NotAssigned, "aydog")
this.insert(aydog)
}
}
.
Как я могу вернуть вставленный идентификатор Aydog?
Если это имеет значение, моя база данных поддерживает Postgres
Решение
в Play 2, если у вас есть AUTOINCREMENT LONG PK:
val id: Long = SQL("insert into bla bla bla").on("bleh", "blah").executeInsert().get
. Другие советы
Я не использую волшебную черту (как она удалена в Play 2.0), поэтому я не уверен, что это тоже здесь работает.В SQL вы можете использовать scope_identity (), чтобы получить последний идентификатор, используемый на соединении.Так что вы можете сделать так, как кажется, как
val id = SQL("SELECT SCOPE_IDENTITY()")().collect {
case Row(id: Int) => id
}.head
new SomeModel(new Id(id), "aydog")
.
Я просто играю с игрой прямо сейчас.Так что это ничто, я бы порекомендовал использовать в производстве без дальнейших расследований.Я особенно не уверен, могут возникнуть проблемы с параллелизмом, когда несколько потоков используют метод Aydogay.