2012-02-14 8 views
0

私の基本的なシナリオは、JPAにマップされている双方向の多対多の関係です。十分に簡単です。しかし、マッピングに '型'を追加する必要があり、私は最良の実装に苦しんでいます。ここでアウトラインがあります:サブタイプによる多対多JPAマッピング

Network 
    Set<Member> defaultMembers; //members that meet the network definition 
    Set<Member> suppressedMembers; //members that meet the network definition, but are hidden. 
    Set<Member> addedMembers; //memders that don't meet the network definition, but have been added in anyway. 

Member 
    Set<Network> attachedNetworks; 

私は、これは双方向(例えば、私が唯一のネットワークからメンバーを取得するために必要な、その他の方法を移動できるようにする必要はありませんでした)である必要はありませんでした場合は、私にとって最も明白な解決策は、メンバーの各セット(network_member, suppressed_member, added_member)ごとに1つのリンクテーブルですが、それは別の方法に分かれています。私は1つのリンクテーブルを使用してディスクリミネータカラムを持つエンティティにすることができますが、誰かがリンクテーブルをエンティティとして使用するのを見るたびに、コードは災害に変わるようです。

私は多くの同様の質問を見つけましたが、質問はあまりにも具体的でないか、答えが私が求めている解決策をかなりカバーしていません。この状況を処理する最善の方法に関する提案はありますか?

答えて

0

明らかに、ポータブルソリューションは、次のようなものです:3のテーブルを結合

  1. 使用し、また部材を有する、
  2. が追加Attachmentエンティティを使用して会員エンティティにネットワークの3セットを持って、ネットワーク、および添付ファイルの種類(デフォルト、抑止または追加)です。ネットワークとアタッチメントの間にOneToMany双方向アソシエーションがあり、メンバーとアタッチメントの間に別のOneToMany双方向アソシエーションがあります。

もし適合しない場合は、理由を説明してください。

+0

最初の解決策は十分に適切です。主な偶然はメンバーの観点からは、私は添付ファイルの種類については気にしないということです。それをもう一度見てみると、私の本当の疑問は、「3つの別々のコレクションにぶつかるのではなく、ネットワークの関係を含めると簡単にメンバに対してクエリを保存するためのパターンがありますか?私は自分の質問を編集するつもりです。 – Ickster

+0

これが主な目的なら、おそらく私の2番目の解決策が最適です。 –

+0

私はちょうどあなたの2番目の提案を読んで、私が当初想定していたものではないことに気付きました。私はそれを設定することを見てみましょう。ありがとう。 – Ickster

関連する問題