2009-08-14 118 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