簡體   English   中英

使用Play Framework Anorm,如何獲取插入的自動生成的ID?

[英]Using Play Framework Anorm, how do I get the auto-generated id back for an insert?

假設我有:

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

在播放2中,如果您具有自動遞增的長PK:

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

我不使用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方法時,我尤其不確定是否可能存在並發問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM