【问题标题】:Hibernate @OneToMany - mapping to multiple join tablesHibernate @OneToMany - 映射到多个连接表
【发布时间】:2009-08-14 00:47:33
【问题描述】:

考虑以下领域模型:

Issue
- id
- List<Comment>

Entry
- id
- List<Comment>

Comment
-id
-comment

在我的设计中,我试图创建两个连接表来管理关联; issue_cmets 和 entry_cmets。我假设@OneToMany 在问题和条目上,但是你如何映射多个连接表?使用hibernate注解,如何映射?

【问题讨论】:

    标签: java hibernate annotations


    【解决方案1】:

    如果您可以更改域模型,请查看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()
    

    对于问题和条目,您的 cmets 仍将位于同一个表中;只有连接表会有所不同。请注意,这是一个单向关系。详情here

    【讨论】:

      【解决方案2】:

      这就是所谓的独家弧线。不要这样做。而是这样做:

      Post (id, List<Comment>)
      Issue extends Post
      Entry extends Post
      Comment (id, comment)
      

      换句话说,为 Issue 和 Entry 创建一个公共超类,并在其上放置 cmets。

      【讨论】:

      • 如果关联是双向的,这只会是一个排他的弧。 Hibernate 提供了其他方式来映射一对多。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 2012-02-08
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多