通过前两篇Hibernate 一对一,一对多几个映射关系的介绍,还剩下最后一大类:多对多映射。当然还是有单向和双向之分。
单向多对多映射
举例:用户和角色的关系。一个用户可以有多个角色,一个角色可以有多个用户。
实现策略:n:n的关系,一定会有一张第三张表来维护他们的关系。
如图:
关键代码:如果是user单向对role 那么则在user的一端加入标签映射。
<set name="roles" table="t_user_role">
<key column="user_id"/>
<many-to-many class="com.hibernate.Role" column="role_id"/>
</set>
二)双向多对多映射
在实际中到底是采用单向映射还是采用双向映射都是根据具体的需求,看是不是需要从一端把另一端加载出来,同时也从另一端把对方加载出来。
实现策略:
两端都添加 many-to-many>的标签映射。不过要注意,两端生成的中间表名称和字段都必须一致。
Role端
<set name="users" table="t_user_role">
<key column="role_id"/>
<many-to-many class="com.hibernate.User" column="user_id"/>
</set>
User端
<set name="roles" table="t_user_role">
<key column="user_id"/>
<many-to-many class="com. hibernate.Role" column="role_id"/>
</set>
总结:
多对多关联映射的实现都比较简单。主要是在实际应用中根据不同的需求看是采取单向还是双向。也注意两端的一致性即可。