2009-08-14 119 views
2

考慮下面的域模型:休眠@OneToMany - 映射到多個表連接

Issue 
- id 
- List<Comment> 

Entry 
- id 
- List<Comment> 

Comment 
-id 
-comment 

在我的設計,我試圖創建兩個連接表管理協會; issue_comments和entry_comments。我假設問題& Entry @OneToMany,但是如何映射多個連接表?使用hibernate註釋,它如何映射?

回答

3

如果您可以更改您的域模型,請參閱cletus給出的答案。您只會更新一張表,以便提供更好的性能。

如果你不能改變你的域模型,您可以通過連接表映射您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 2013-03-28 15:13:08

1

這就是所謂的獨家弧。不要這樣做。相反,請執行以下操作:

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

換句話說,爲Issue和Entry創建一個通用超類並對其進行註釋。

+0

如果該關聯是雙向的,則這只是一個專屬弧。 Hibernate提供了其他映射一對多的方法。 – ChssPly76 2009-08-14 01:52:19