How to Retrieve the Primary Key When Saving a New Object in Anorm

拥有回忆 提交于 2019-11-29 06:14:42

问题


I'm using Scala Play! framework with Anorm to persist the data model to the database. I followed the example code here :

case class Bar(id: Pk[Long], name: String)

object Bar {

  val simple = {
    get[Pk[Long]]("id") ~
    get[String]("name") map {
      case id~name => Bar(id, name)
    }
  }

  def findAll(): Seq[Bar] = {
    DB.withConnection { implicit connection =>
      SQL("select * from bar").as(Bar.simple *)
    }
  }

  def create(bar: Bar): Unit = {
    DB.withConnection { implicit connection =>
      SQL("insert into bar(name) values ({name})").on(
        'name -> bar.name
      ).executeUpdate()
    }
  }

}

Trying to expand on it, I want to retrieve the primary key just created and store it in the case class.

How can I retrieve the primary key?


回答1:


Use the executeInsert method instead of executeUpdate. Noted here, the foremer method returns Option[T] where T is the type of the primary key.

You can extract the value with a match statement:

    DB.withConnection { implicit connection =>
        SQL(...).executeInsert()
    } match {
        case Some(long) => long // The Primary Key
        case None       => ...
    }


来源:https://stackoverflow.com/questions/9859700/how-to-retrieve-the-primary-key-when-saving-a-new-object-in-anorm

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!