2012-03-25 8 views
18

मैं स्कैला प्ले का उपयोग कर रहा हूं! डेटा मॉडल को डेटाबेस में बनाए रखने के लिए एनोम के साथ ढांचा। मैं उदाहरण कोड 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() 
    } 
    } 

} 

इस पर विस्तार करने के लिए कोशिश कर रहा है, मैं प्राथमिक कुंजी अभी बनाया निकालते हैं और मामले वर्ग में संग्रहीत करना चाहते हैं।

मैं प्राथमिक कुंजी कैसे प्राप्त कर सकता हूं?

उत्तर

35

executeUpdate के बजाय executeInsert विधि का उपयोग करें। here नोट किया गया, अग्रदूत विधि Option[T] लौटाता है जहां T प्राथमिक कुंजी का प्रकार है।

आप एक match बयान से मान प्राप्त कर सकते हैं:

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

+1 मैं आज – opyate

+3

की कोशिश की यह तभी प्राथमिक कुंजी एक ऑटो वेतन वृद्धि की कुंजी है लागू होता है। यदि ऐसा नहीं है, तो परिणाम कोई नहीं होगा –

+0

इसके अलावा, यदि कोई आईडी डाली गई है तो यह 'INSERT IGNORE' के लिए काम नहीं करती है। –

संबंधित मुद्दे