0

私は 2 つの休止状態のエンティティ間に m2m 関係を持っています。それらを映画と俳優と呼びましょう。双方向リンクでセットアップしました。明らかに、これは映画テーブル、俳優テーブル、およびデータベース内の 2 つの間の外部キーの結合テーブルとしてモデル化されています。

UI を使用すると、アクターとムービーの間の関係を更新できます。内部的に、UI は関連する映画と俳優の ID を使用して画面上の更新を追跡し、「保存」を押すと映画 ID と俳優 ID のリストをコントローラーに送信します。

ここで私の質問: データベースで 4 つのアクタを追加してムービーを更新するとします。追加するアクター ID のリストはありますが、UI から ID を受け取っただけなので、実際の Actor オブジェクトはありません。

この更新を行うには、本格的な Actor オブジェクトを 4 つ入力して、それらを Movie オブジェクトに追加し、データベースに保存できるようにする必要がありますか? つまり、最初にデータベースから選択してから更新を行う必要がありますか? 実際に更新されるのは結合テーブルにいくつかの行を追加することだけであり、それを行うために必要なすべての情報を既に持っているため、余分な選択呼び出しを行うのは非効率的です。

したがって、休止状態は、結合テーブル自体にキーを直接追加する便利な方法を提供しますか (カスタムの生の SQL クエリを作成する必要はありません)。

4

1 に答える 1

0

Session.loadは、あなたが望むことを行います。アクターの ID のみを含む Actor のプロキシを返し、アクターがデータベースに存在することがわかっていると想定します。そうでない場合、外部キー制約が壊れているため、更新後にトランザクションはもちろんロールバックします。アクターがセッションに既に存在する場合は、それが返されます。トランザクションが最終的にアクターの 1 つでメソッドを呼び出す必要がある場合、問題はありません。これはプロキシであり、必要に応じてアクターの状態が読み込まれます。

JPA EntityManager と同等のメソッドはgetReferenceです。

于 2011-07-07T17:11:41.433 に答える