1

エンティティを永続化するために JPA を使用しています。エンティティ A と B の間にManyToMany関係があるとします。したがって、クラスAでは a 、 a にList<B>なりBますList<A>

私の質問は、新しい関係を追加する効率についてです。簡単な方法add(new B())で、クラスのリストに a を作成できAます。実行時に add メソッドを呼び出すと、クラス内Listのオブジェクトはすべてデータベースからロードされますか? これは効率的ですか?BA

200 のリレーションシップがある場合、それらすべてをロードして、新しいオブジェクトを追加するだけBですか? テーブルに新しい行を挿入するには、ネイティブ クエリを作成することをお勧めしManyToManyます。

4

3 に答える 3

2

List での add() の動作は、JPA プロバイダーに依存します。

EclipseLink の場合、LAZY List リレーションシップの add() では、デフォルトでリストがフェッチされません。

于 2012-12-17T14:46:49.273 に答える
1

通常、JPA プロバイダーは、遅延読み込みをサポートする Java コレクションの独自の実装を提供するため、すべての関係が最初から読み込まれるわけではありません。

また、説明したようにリストを変更すると、JPA プロバイダーはデータベースを透過的に更新する必要があります。自分でキャッシュした可能性のある参照を除いて、物事の一貫性を保つことを心配する必要はありません。

于 2012-12-17T14:39:22.600 に答える
0

数百に達し始めたら、結合テーブルを JPA エンティティとしてマップし、ManyToMany マッピングを使用せずに、2 つの ManyToOne マッピングを使用して結合テーブルで直接操作 (ミューテーションと選択) を実行する方がよい場合があります。

于 2012-12-17T14:37:25.127 に答える