Play Framework Anormを使用するには、インサートの自動生成IDを取り戻すにはどうすればよいですか。

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の挿入されたIDを取り戻すには?

事項の場合、バッキングデータベースはPostgres です。

役に立ちましたか?

解決

PLAY 2自動インクリメント長いPKを持っている場合:

val id: Long = SQL("insert into bla bla bla").on("bleh", "blah").executeInsert().get
.

他のヒント

マジックトレイトを使用していません(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")
.

今すぐプレイと一緒に遊んでいます。だからこれはさらなる調査なしにプロダクションで使用することを推薦するものではありません。複数のスレッドがAyDogayメソッドを使用する場合、並行性の問題がある場合は特にわかりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top