使用Play Framework Anorm,如何为插入获取自动生成的ID?

时间:2012-03-09 21:57:59

标签: postgresql scala playframework anorm

假设我有:

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 个答案:

答案 0 :(得分:4)

如果您有自动增量长PK,则在Play 2中

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

答案 1 :(得分: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方法时,我特别不确定是否存在并发问题。