1

古典的な問題、新しいフレームワーク、つまり問題です。

PostgreSQL + スカラ + スカラクエリ。シリアル (autincrement) ID を持つマスター テーブルとシリアル ID を持つスレーブ テーブルがあります。

1 つのマスター レコードと複数のスレーブを挿入する必要があります。トランザクション内で実行する必要があるため (すべてをキャンセルできるようにするため)、マスターを挿入した後にクエリを実行して ID を確認することはできません。私が見る限り、SQ の「挿入」メソッドは、挿入されたマスター レコードへの参照を返しません。

では、どうやってそれを行うのですか?

ただし、SQ の例では自動インクリメント フィールドを使用せずにこれをカバーしているため、このようなソリューション (事前設定された ID) はここでは適用できません。

4

1 に答える 1

0

私がそれを正しく理解していれば、これは今のところ自動的には不可能です。恐れがなければ、これはこのように行うことができます。最後の挿入の ID を取得する (マスター レコードの挿入ごとに):

最後に挿入された ID の postgreSQL 関数

次に、SQ で使用します。

http://groups.google.com/group/scalaquery/browse_thread/thread/faa7d3e5842da82e

このコードは、MySql の方法を示しています。後世のためにリストに載せておきます。

val scopeIdentity = SimpleFunction.nullaryLong

val insert = Actions.insert( "cat", "eats", "dog)

//挿入されたレコードの数を出力します。println(挿入済み)

//最後に挿入されたレコードの主キーを出力します。println(Query(scopeIdentity).first)

// よろしく // ブライアン

しかし、自動インクリメント フィールドの場合、autoinc フィールドを除外したプロジェクションを使用し、名前付きレコード タイプの代わりにタプルを挿入する必要があるため、SQ がこれを直接サポートするまで息を止める価値がないかどうかという疑問があります。

私はSQの初心者です。誤解を与えるかもしれません。

于 2011-11-29T17:00:11.140 に答える