2009-08-14 2 views
2

は、以下のドメインモデルを検討加入:私の設計では休止@OneToMany - 複数のマッピングがテーブル

Issue 
- id 
- List<Comment> 

Entry 
- id 
- List<Comment> 

Comment 
-id 
-comment 

を、私は2つの関連付けを管理するためのテーブルを結合を作成しようとしていました。 issue_comments、およびentry_commentsが含まれます。私は問題&のエントリで@OneToManyを想定しましたが、複数の結合テーブルをどのようにマッピングしますか?休止状態の注釈を使用すると、これをどのようにマッピングできますか?

答えて

3

ドメインモデルを変更できる場合は、cletusの回答をご覧ください。更新するテーブルは1つだけですので、パフォーマンスが向上します。あなたのドメインモデルを変更することができない場合は、テーブルを結合を通じて

、あなたのcommentコレクションをマッピングすることができます。

// ENTRY 
@OneToMany 
@JoinTable(
     name="ENTRY_COMMENTS", 
     joinColumns = @JoinColumn(name="entry_id"), 
     inverseJoinColumns = @JoinColumn(name="comment_id") 
) 
public List<Comment> getComments() 

// ISSUE 
@OneToMany 
@JoinTable(
     name="ISSUE_COMMENTS", 
     joinColumns = @JoinColumn(name="issue_id"), 
     inverseJoinColumns = @JoinColumn(name="comment_id") 
) 
public List<Comment> getComments() 

あなたのご意見はまだ問題とエントリの両方で同じテーブルになります。結合表のみが異なります。これは一方向の関係であることに注意してください。詳細はhere

+0

これは素晴らしいです! – zmanc

1

これは排他的アークと呼ばれています。それをしないでください。代わりに、次のようにします。

Post (id, List<Comment>) 
Issue extends Post 
Entry extends Post 
Comment (id, comment) 

つまり、Issue and Entryの共通スーパークラスを作成し、コメントを付けます。

+0

アソシエーションが双方向の場合にのみ排他的アークになります。 Hibernateは、一対多をマッピングする他の方法を提供します。 – ChssPly76

関連する問題