Использование Play Framework Anorm, как получить автоматическую идентификатор для вставки?

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

Вопрос

Предположим, у меня есть:

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top