2012-04-24 10 views
3

私はScalaQueryを使用してPostgreSQLにアクセスしています。 Dataは、と定義されたidという名前の自動インクリメンタルプライマリキーを持つテーブルです。私はData.insert(name, filename)を使って新しいDataレコードを作成します。作成したばかりのレコードのidを取得する方法はありますか? insertメソッドは、executeUpdateによって返されるInt値のみを返します。あなたの挿入を実行、スコープで上記のヘルパーで、その後、ScalaQueryによってちょうど挿入された自動インクリメントIDを取得する方法

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

答えて

3

ScalaQueryは、アウトオブボックスのシーケンスIDをサポートしていない、あなたは最初のヘルパーメソッドを定義する必要があり

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

+1

スレッドセーフです。クエリはセッションコンテキスト内で発生し、LASTVALは現在のセッションの最後に挿入されたIDを保証します – virtualeyes

関連する問題