2

私が持っているとしましょう:

case class SomeModel(
  id : Pk[Long],
  description : String
)

object SomeModel extends Magic[SomeModel] {
  def ayDogAy = {
    var aydog = SomeModel(NotAssigned, "aydog")
    this.insert(aydog)
  }
}

挿入されたaydogのIDを取り戻すにはどうすればよいですか?

重要な場合、私のバッキングデータベースはPostgresです

4

2 に答える 2

4

Play 2で、自動インクリメントの長いPKがある場合:

val id: Long = SQL("insert into bla bla bla").on("bleh", "blah").executeInsert().get
于 2012-06-08T10:11:56.520 に答える
1

私はMagicトレイトを使用していません(Play 2.0で削除されているため)。したがって、これがここでも機能するかどうかはわかりません。SQLでは、SCOPE_IDENTITY()を使用して、接続で使用された最後のIDを取得できます。だからあなたは次のような何かをすることができます

    val id = SQL("SELECT SCOPE_IDENTITY()")().collect {
               case Row(id: Int) => id
             }.head
    new SomeModel(new Id(id), "aydog")

今、Playで遊んでいます。したがって、これは、さらに調査せずに本番環境で使用することをお勧めするものではありません。複数のスレッドがayDogAyメソッドを使用している場合、並行性の問題が発生する可能性があるかどうかは特にわかりません。

于 2012-03-11T17:50:56.490 に答える