2013-04-08 23 views
0

我向數據庫中插入一個新行,其ID是自動遞增的(「串行」)。如何在插入後獲得id的值?目前,我公司採用以下解決方法:Squeryl獲取串行值

inTransaction { 
    Schema.table.insert(new Entry(
     content = "..." 
)) 
    def entries = from(Schema.table)(e => select(e) orderBy(e.id desc)).page(0, 1) 
    val id = entries.headOption match { 
    case Some(entry) => entry.id 
    case None => 0 
    } 
} 

如果沒有更簡單的方法,我怎麼能保證這個整個塊將是一個原子操作?

回答

0

是,

val new = Schema.table.insert(myOriginalOld) 
Console println new.id 
+0

這將如何工作,'myOriginalOld'沒有'id'成員和'new'必須是同一類型爲'myOriginalOld'的。如果'myOriginalOld'提供了'id',我將不得不使用'on(entries)(entry => declare(entry.id is(autoIncremented(「Entry_id_seq」)))''這會導致我的'ExceptionInInitializerError'機。否則它也不會工作... – ideaboxer

+0

您可以使用KeyedEntity。例如,如果你想在你的數據庫中使用最簡單的主鍵,使用類似於 case case class Fuit(id:Long = 0L,color:String)擴展KeyedEntity [Long]' 在你的問題中,你說你想要id來自數據庫。如果是這樣,squeryl對象必須包含id。 – VasyaNovikov