Используя Play Framework Anorm, как мне вернуть автоматически сгенерированный идентификатор для вставки? - PullRequest
2 голосов
/ 10 марта 2012

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

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

Ответы [ 2 ]

4 голосов
/ 08 июня 2012

В игре 2, если у вас длинный автоинкремент PK:

val id: Long = SQL("insert into bla bla bla").on("bleh", "blah").executeInsert().get
1 голос
/ 11 марта 2012

Я не использую черту Magic (так как она удалена в 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")

Я просто сейчас играю с Play. Так что это ничто, что я бы рекомендовал использовать в производстве без дальнейших исследований. Я особенно не уверен, могут ли быть проблемы с параллелизмом, когда несколько потоков используют метод ayDogAy.

...