Hibernate @OneToMany - 映射到多个连接表

时间:2009-08-14 00:47:33

标签: java hibernate annotations

考虑以下域模型:

Issue
- id
- List<Comment>

Entry
- id
- List<Comment>

Comment
-id
-comment

在我的设计中,我试图创建两个连接表来管理关联; issue_comments和entry_comments。我假设@OneToMany on Issue&amp;输入,但是如何映射多个连接表?使用hibernate注释,如何映射?

2 个答案:

答案 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创建一个公共超类,并对其进行评论。