2012-03-25 11 views
18

Scala Play'i kullanıyorum! Veri modelini veritabanına devam ettirmek için Anorm ile çerçeve. Ben örnek kod here izledi:Anorm'da Yeni Bir Nesneyi Kaydetirken Birincil Anahtar Nasıl Alınır

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

} 

üzerine genişletmek için çalışıyorum, ben birincil anahtar yeni oluşturulan almak ve vaka sınıfında saklamak istiyorum.

Birincil anahtarı nasıl alabilirim?

cevap

35

executeUpdate yerine executeInsert yöntemini kullanın. Not here, foremer yöntemi Option[T] döndürür, burada T birincil anahtar türüdür.

Bir match ifadesiyle değerini çıkarabilir:

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

+1 Ben birincil anahtar bir otomatik artış anahtarı ise bu geçerlidir Bunu bugün – opyate

+3

çalıştı. Değilse, sonuç –

+0

Olmayacaktır. Ayrıca, kimlik girilmediyse bu “INSERT IGNORE” için çalışmaz. –