考慮下面的域模型:休眠@OneToMany - 映射到多個表連接
Issue
- id
- List<Comment>
Entry
- id
- List<Comment>
Comment
-id
-comment
在我的設計,我試圖創建兩個連接表管理協會; issue_comments和entry_comments。我假設問題& Entry @OneToMany,但是如何映射多個連接表?使用hibernate註釋,它如何映射?
考慮下面的域模型:休眠@OneToMany - 映射到多個表連接
Issue
- id
- List<Comment>
Entry
- id
- List<Comment>
Comment
-id
-comment
在我的設計,我試圖創建兩個連接表管理協會; issue_comments和entry_comments。我假設問題& Entry @OneToMany,但是如何映射多個連接表?使用hibernate註釋,它如何映射?
如果您可以更改您的域模型,請參閱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
這就是所謂的獨家弧。不要這樣做。相反,請執行以下操作:
Post (id, List<Comment>)
Issue extends Post
Entry extends Post
Comment (id, comment)
換句話說,爲Issue和Entry創建一個通用超類並對其進行註釋。
如果該關聯是雙向的,則這只是一個專屬弧。 Hibernate提供了其他映射一對多的方法。 – ChssPly76 2009-08-14 01:52:19
這太棒了! – zmanc 2013-03-28 15:13:08