質問

現在のインサートの自動インクリメントIDを取得するためのslick / plainsqlネイティブソリューションがありませんか?

userIDは、MySQLテーブルの自動増分フィールドです。

sql"""
   INSERT INTO `table`(`email`) 
   OUTPUT INSERTED.userId 
   VALUES ("theEmailAdress@test.de")
""".as[Int].firstOption
.

ヘルプは大いに感謝されるでしょう。

歓声 オリバー

役に立ちましたか?

解決 2

ありがとうございますこの議論での支援のためにCVogt SlickのPlainSQLクエリ

最後に、行方不明のネイティブ関数を以下のように置き換えるための作業を見つけました。

同じセッション内で2つのクエリを解決します。最初のものはINSERTステートメントです。このステートメントはSELECT LAST_INSERT_ID()です。これは、最近実行されたAUTO_INCREMENT(1)によってINSERT列に設定された最新の自動生成値を返します。詳細はこちら: MySQLリファレンス - last_insert_id()

Database.forDataSource(dataSource).withDynSession {
  sqlu"""INSERT INTO `users`(`email`) VALUES ("theEmailAdress@test.de")
  """.firstOption match {
    case Some(num) if num == 1 => sql"SELECT LAST_INSERT_ID()".as[Long].firstOption()
    case None => None
  }
}
.

これは今私のために働きます。改善がある場合は、解決策を投稿することを躊躇しないでください。

他のヒント

はデータベースによって異なります。

MS SQLの場合はscope_identity()です.MySQLはlast_insert_id()です。 上記のどれでもない場合は、DBと同等のものを検索してみてください。

CVOGT

現在、Slickのsql"..." InterpolationまたはStaticQueryを使用するときに基礎となるjdbcステートメントにアクセスする方法は現在、現在のjdbcステートメントにアクセスする方法はありません。これにより、getGeneratedKeysにアクセスできます。おそらく SQL Interpolator statementInvoker 。彼らはわずか150人です。ショットを与えてPRを提出する価値があるかもしれません。

しかし、 slick session メソッドwithPreparedInsertStatementのようなメソッド。 JDBC接続 JDBCステートメントを操作する方法。これに関するドキュメントを追加するためのPRを作成しました。 https://github.com/slick/slick/pull / 691

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top