Hibernate - 两个类之间的多个多对多关联

时间:2016-03-25 17:06:21

标签: java hibernate

我有两个实体,称为AB。这些实体可以处于彼此的三种不同的多对多关系之一。

我如何在Hibernate中对其进行建模?这个想法是A类会有字段:

Set<B> relationX;
Set<B> relationY;
Set<B> relationZ;

类似的B类也有字段:

Set<A> relationX;
Set<A> relationY;
Set<A> relationZ;

这两个类都有三个字段,因为我希望关联是双向的。

拥有&#34;标准&#34;像这样一个Hibernate多对多注释...

@JoinTable(name = "A_relX_B",
        joinColumns = {@JoinColumn(name = "A_ID")},
        inverseJoinColumns = {@JoinColumn(name = "B_ID")}
)

...不起作用,因为没有办法区分三个独立的关系。我怎么做到这一点?或者我是否需要手动分解m-to-n关系?

2 个答案:

答案 0 :(得分:2)

你已经走在正确的道路上了:

public class A {
  @ManyToMany
  @JoinTable(name = "A_relX_B",
    joinColumns = {@JoinColumn(name = "A_ID")},
    inverseJoinColumns = {@JoinColumn(name = "B_ID")}
  )
  Set<B> relationX;

  @ManyToMany
  @JoinTable(name = "A_relY_B",
    joinColumns = {@JoinColumn(name = "A_ID")},
    inverseJoinColumns = {@JoinColumn(name = "B_ID")}
  )
  Set<B> relationY;

  @ManyToMany
  @JoinTable(name = "A_relZ_B",
    joinColumns = {@JoinColumn(name = "A_ID")},
    inverseJoinColumns = {@JoinColumn(name = "B_ID")}
  )
  Set<B> relationZ;
}

基本上,这些是独立的关联,只要每个关联映射到一个单独的关系表,就可以有一个(最常见的情况)或一百个。

同样在B方面(不要忘记mappedBy选择每个关联的反面)。

答案 1 :(得分:0)

我不知道是否有一种简单的方法可以实现这一点,而无需规范表格中的多对多关系。在关系数据库中具有多对多关系通常被认为是禁忌,并且需要交叉引用表来管理它们。