2011-07-07 13 views
0

2つのハイバネートエンティティの間にm2mの関係があります。それらをムービーとアクタと呼びましょう。これは双方向リンクでセットアップしました。明らかに、これはムービーテーブル、アクターテーブル、および2つのデータベース間の外部キーの結合テーブルとしてモデル化されています。hibernateエンティティ間の関係を効果的に更新する

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

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

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

したがって、hibernateは、独自のraw sqlクエリを作成せずに、結合テーブル自体に直接キーを追加する便利な方法を提供しますか?

答えて

0

Session.loadあなたは何をしますか?アクターのIDだけを含むアクターのプロキシを返し、アクターがデータベースに存在することを知っていることを前提としています。更新されていない場合、外部キー制約が壊れているため、トランザクションは更新後ももちろんロールバックされます。 アクターが既にセッションに存在する場合は、それが返されます。トランザクションが最後に、アクターのいずれかでメソッドを呼び出す必要がある場合、プロンプトなし:プロキシーであり、必要に応じてアクターの状態がロードされます。

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

関連する問題