Play Framework Anormを使用するには、インサートの自動生成IDを取り戻すにはどうすればよいですか。
-
10-12-2019 - |
質問
私が持っているとします:
case class SomeModel(
id : Pk[Long],
description : String
)
object SomeModel extends Magic[SomeModel] {
def ayDogAy = {
var aydog = SomeModel(NotAssigned, "aydog")
this.insert(aydog)
}
}
.
aydogの挿入されたIDを取り戻すには?
事項の場合、バッキングデータベースはPostgres です。
解決
PLAY 2自動インクリメント長いPKを持っている場合:
val id: Long = SQL("insert into bla bla bla").on("bleh", "blah").executeInsert().get
. 他のヒント
マジックトレイトを使用していません(Play 2.0で削除されているので)、これがここで働くかどうかはわかりません。SQLでは、scope_identity()を使用して、接続で使用される最後のIDを取得できます。だからあなたはのようなものをすることができます
val id = SQL("SELECT SCOPE_IDENTITY()")().collect {
case Row(id: Int) => id
}.head
new SomeModel(new Id(id), "aydog")
.
今すぐプレイと一緒に遊んでいます。だからこれはさらなる調査なしにプロダクションで使用することを推薦するものではありません。複数のスレッドがAyDogayメソッドを使用する場合、並行性の問題がある場合は特にわかりません。
所属していません StackOverflow