用户和角色之间就是多对多的关系
单向关联 |
用户端:
<class name="com.bjpowernode.hibernate.User" table="t_user" >
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<set name="roles" table="t_user_role">
<key column="user_id"></key>
<many-to-many class="com.bjpowernode.hibernate.Role" column="role_id" />
</set>
</class>
角色端
<class name="com.bjpowernode.hibernate.Role" table="t_role" >
<id name="id">
<generator class="native" />
</id>
<property name="name" />
</class>
实现原理:
- 用户实体持有角色实体的一个set集合,利用第三方表将两个表的主键联系起来
实现方式:
- 用户端添加
<many-to-many>
标签
双向关联 |
用户端:
<class name="com.bjpowernode.hibernate.User" table="t_user" >
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<set name="roles" table="t_user_role">
<key column="user_id"></key>
<many-to-many class="com.bjpowernode.hibernate.Role" column="role_id" />
</set>
</class>
角色端
<class name="com.bjpowernode.hibernate.Role" table="t_role" >
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<set name="users">
<key column="role_id" />
<many-to-many class="com.bjpowernode.hibernate.User" column="user_id" />
</set>
</class>
实现原理:
- 两个单向的多对多的应用,各端持有对端的set集合引用
实现方式:
- 两端都添加
<many-to-many >
标签
最后映射的表是这样的:
多对多就是两个多对一的应用,在多对多的关系中会另外生成第三张表最为中间表,其中原对象表都持有中间表的引用。<set>
标签表明中间表的名称,中间表一般有两个字段,分别为两外两张表的主键,<key>
用于指定中间表的外键,从而从中间表中取出两外一端主键的值,根据这个值,在两外一张表中取出相关的数据。<many-to-many >
标签中的column用于指定根据哪个字段取出对端的值