2

KeyedEntity に関して私が見つけた唯一の情報は次のとおりです。

KeyedEntity[K] を拡張するオブジェクト (K は数値型) には、id フィールドに新しく作成された主キー値が割り当てられます (キーを生成するメカニズムは、各 DatabaseAdaptor に固有です)。

キー付きオブジェクトが不変の場合、これはどのように適用されますか? それでは、オブジェクトの id フィールドを新しく作成された主キー値に割り当てることは不可能ではないでしょうか?

オブジェクトのキーを返すために、オブジェクトの KeyedEntity 内の抽象 id メソッドをオーバーライドすることになっていると思います。しかし、Squeryl はデータベースへの書き込み時にどのフィールドをキーとして使用するかをどのように判断するのでしょうか?

問題がある場合は、Squeryl 9.5 を使用しています。これらの問題に関するドキュメントはあまり見つかりません。

4

2 に答える 2

0

それでは、オブジェクトの id フィールドを新しく作成された主キー値に割り当てることは不可能ではないでしょうか?

はい、通常の標準的な方法を使用することは不可能ですが、それは起こっていることではありません. オブジェクトを変更するのではなく、新しいオブジェクトを作成します。たとえば、メソッド .insert(myEntry) は、元の myEntry ではなく、そのメソッドを呼び出したときに挿入されたオブジェクトを返します。

オブジェクトのキーを返すために、オブジェクトの KeyedEntity 内の抽象 id メソッドをオーバーライドすることになっていると思います。

いいえ、入力する必要はありません。空白のままにしておいてかまいません。また、テーブル フィールドに「id」とは異なる名前を付ける場合は、関数も含めることを忘れないでくださいdef id = myIdField

しかし、Squeryl はデータベースへの書き込み時にどのフィールドをキーとして使用するかをどのように判断するのでしょうか?

正確な名前「id」を持つメソッドを検索します。または、先ほど書いたような手動機能。

トピック タイトルへの回答 -- たとえば、KeyedEntity の使用例の 1 つは、myEntities.lookup(30L) などのメソッドを呼び出すことです。または、「updateOrInsert」メソッドを呼び出せるようにします。新しいデータベースを最初から作成するときに「主キー」を自動定義します。その他...

これらの問題に関するドキュメントはあまり見つかりません。

たとえば、ルックアップ方法は次のとおりです。http://squeryl.org/selects.html 実は、今書いていることはすべて、少し前にサイトから学んだものです。

于 2013-04-07T16:16:27.760 に答える