考虑以下域模型:
Issue
- id
- List<Comment>
Entry
- id
- List<Comment>
Comment
-id
-comment
在我的设计中,我试图创建两个连接表来管理关联; issue_comments和entry_comments。我假设@OneToMany on Issue&amp;输入,但是如何映射多个连接表?使用hibernate注释,如何映射?
答案 0 :(得分: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
答案 1 :(得分:1)
这就是所谓的专属弧。不要这样做。而是这样做:
Post (id, List<Comment>)
Issue extends Post
Entry extends Post
Comment (id, comment)
换句话说,为Issue和Entry创建一个公共超类,并对其进行评论。