2012-04-24 98 views
3

我正在使用ScalaQuery來訪問PostgreSql。 Data是一個表,它有一個名爲id的自動增量主關鍵字,定義爲def id = column[Long] ("id", O NotNull, O PrimaryKey, O AutoInc, O DBType "serial")。我使用Data.insert(name, filename)創建了一個新的Data記錄。有沒有辦法獲得剛創建的記錄的idinsert方法僅返回由executeUpdate返回的Int值。如何獲得由ScalaQuery插入的自動增量ID

回答

3

ScalaQuery不支持序列ID外的開箱,你需要首先定義一個輔助方法:

val seqID = SimpleFunction.nullary[Int]("LASTVAL") 

然後,在範圍以上的幫手,執行您的插入:

db withSession { 
    val q = Foo.insert(someInstance) 
    val id = Query(seqID) // call sequence helper 
} 

以評論回覆:線程安全,請參考:
https://stackoverflow.com/a/2944481/185840

和:
https://github.com/szeiger/scala-query/issues/10#issuecomment-698418

+0

謝謝。乍看之下,這個解決方案似乎是線程不安全的。這是一個問題嗎? – xiefei 2012-04-24 13:00:11

+1

它是線程安全的,查詢發生在會話上下文中,並且LASTVAL保證當前會話的最後插入的ID – virtualeyes 2012-04-24 13:02:00