多对多(如用户与权限关系。一个用户可以有多个权限,一个权限可以分配给多个用户)
关系维护端:一般将多(many)的一方定义为关系维护端,负责外键记录的更新;
关系被维护端:是没有权力在关系维护端定义外键。
多对多的关联是可以按个人习惯自定义关系维护端与被维护端。
单向关联
下面例子将权限对象做为关系维护端
Role.hbm.xml
<hibernate-mapping>
<class name="com.hibernate.manytomany1.Role" table="t_role1">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<!—定义外键关联-->
<set name="users" table="t_user_role1">
<key column="roleid"/>
<many-to-many class="com.hibernate.manytomany1.User" column="userid"/>
</set>
</class>
</hibernate-mapping>
User.hbm.xml 在这个文档中没有任何关联的定义
<hibernate-mapping>
<class name="com.hibernate.manytomany1.User" table="t_user1">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
双向关联
Role.hbm.xml
<hibernate-mapping>
<class name="com.hibernate.manytomany2.Role" table="t_role2">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<!—定义外键关联-->
<set name="users" table="t_user_role2">
<key column="roleid"/>
<many-to-many class="com.hibernate.manytomany2.User" column="userid"/>
</set>
</class>
</hibernate-mapping>
User.hbm.xml
<hibernate-mapping>
<class name="com.hibernate.manytomany2.User" table="t_user2">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<!—-定义双向关联table属性必须和单向关联中table的名称相同;
<key>中的column属性值必须等于单向关联中<many-to-many>标签指向的column的属性值,<many-to-many>中column属性值必须等于单向关联中(Role.hbm.xml)<key>中column的属性值
-->
<set name="roles" table="t_user_role2">
<key column="userid"/>
<many-to-many class="com.hibernate.manytomany2.Role"
column="roleid"/>
</set>
</class>
</hibernate-mapping>