考虑下面的域模型:休眠@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