我有两个实体,称为A
和B
。这些实体可以处于彼此的三种不同的多对多关系之一。
我如何在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关系?
答案 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)
我不知道是否有一种简单的方法可以实现这一点,而无需规范表格中的多对多关系。在关系数据库中具有多对多关系通常被认为是禁忌,并且需要交叉引用表来管理它们。