Как получить первичный ключ при сохранении нового объекта в Anorm - PullRequest
18 голосов
/ 25 марта 2012

Я использую Scala Play!фреймворк с Anorm для сохранения модели данных в базе данных.Я следовал примеру кода здесь :

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()
    }
  }

}

Пытаясь его расширить, я хочу получить только что созданный первичный ключ и сохранить его в классе дела.

Как я могу получить первичный ключ?

1 Ответ

35 голосов
/ 25 марта 2012

Используйте метод executeInsert вместо executeUpdate. Отмеченный здесь , метод foremer возвращает Option[T], где T - тип первичного ключа.

Вы можете извлечь значение с помощью оператора match:

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