我们需要3个表来完成hibernate中的多对多关系吗?
答案 0 :(得分:1)
是,
在系统分析中,多对多关系是一种基数,它指的是两个实体之间的关系(另请参见实体 - 关系模型)A和B,其中A可能包含父行,其中有B中有很多孩子,反之亦然。例如,将A视为作者,将B视为书籍。作者可以写几本书,一本书可以由几位作者撰写。因为大多数数据库管理系统仅支持一对多关系,所以有必要通过第三交汇表(交叉引用表)物理地实现这种关系,例如,AB具有两个一对多关系A - > AB和B - > AB。在这种情况下,AB的逻辑主键由两个外键(即A和B的主键的副本)组成。
如果你愿意,你可以拥有更多,但3是最低
答案 1 :(得分:0)
你的问题更多地与休眠自身的多对多关系的本质有关。是的,正如G-Man正确指出的那样,你需要3个表(或更多)才能实现它。
查看association mapping上的hibernate文档,尤其是7.5.3
部分以下是来自同一文档的示例:
<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
<set name="addresses" table="PersonAddress">
<key column="personId"/>
<many-to-many column="addressId"
class="Address"/>
</set>
</class>
<class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id>
<set name="people" inverse="true" table="PersonAddress">
<key column="addressId"/>
<many-to-many column="personId"
class="Person"/>
</set>
</class>