Hibernate复杂表的关系

Mysql是一个关系数据库 表跟表之间存在联系

11  1对多 多对多

比如公司表和员工表

一个公司可以有多名员工  而一名员工只能有一个公司

这样的关系就是1对多

在比如用户和角色

用户有 张三 李四两个 角色有总监 小组长 普通

这个时候1个用户有多个角色 张三既是总监也是小组长

同时 总监这个角色 有多个用户跟他对应  张三和李四都是总监 这样的表和表之间的关系 就是多对多的关系

1对多

一对多的关系  如何维护:

1中的主键存在多的表中,在多中 存了1的主键就叫做外键

 Hibernate中维护的方式:  

        

          在公司中存一个 员工的set集合

          同时在员工中存一个公司的类

Hibernate复杂表的关系Hibernate复杂表的关系

配置文件配置的方式:

 在多中(职工中)

<many-to-one name="enterprise" class="cn.hd.bean.Enterprise" column="enterpriseId"></many-to-one>

 

Name在类中的属性名   class多的一方的类名  column 生成外键的字段名

 

 

1中(公司中)配置属性

<set name="employeesSet">
    <key column="enterpriseId"></key>
    <one-to-many class="cn.hd.bean.Employee"></one-to-many>
</set>

Set就是类中set  name 就是公司类中存储的set变量名

Key就是外键

One-to-many写的对应关系表中的类名

多对多

用户 和角色

配置方式:在bean类当中双方都存set集合

Hibernate复杂表的关系

配置文件

<set name="userSet" table="t_user_role" inverse="true">
    <key column="roleId"></key>
    <many-to-many column="userId" class="cn.hd.manyToMany.User"></many-to-many>
</set>

 

 Name指得是类中的属性名  table 多对多的关系必须生成第三张来维护信息 inverse 关系维护控制  双方必须由一方维护,否则就会报错。 谁放弃?不常用的放弃。

 

Keycolumn 列名 在第三张表中 该字段作为外键的名字 

Many-to-many column 对应的是另外一张表中外键的名字 

Class对应的是第三张表中的类

    一般情况下,在多对多关系中,采用级联操作

 

关系维护

Hibernate复杂表的关系

<set name="employeesSet" cascade="save-update" inverse="true">

原则:1对多关系中  多的一方维护  1的一方放弃维护