Hibernate复杂表的关系(Mysql)

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

一对一    一对多   多对多

一对多:

一个公司可以有  多名员工  而 一名只能对应 一个公司 这样的关系就是

再比如用户和角色

用户有 A  B两个  角色有  总监 小组长 普通

这个时候一个用户  有多个角色  A即是 总监 也会小组长

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

一对多的关系 如何 维护

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

Hibernate中维护的方式:

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

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

在员工里面存一个类型

再公司里面存了一个集合

配置文件配置的方式

在  多中(职工)要配置个属性


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

在一中(公司中)


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

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

Key就是外键   one-to-many 写的对应关系表中的类名

级联操作

在保存企业的同时 将这个企业中的所有职工也同时保存 这样少写了两行代码


<!--
      cascade:就是级联操作  为了减少代码
      save-update  级联保存
      delete    级联删除  (不推荐  不安全)
      all   既有保存也有删除(不推荐  不安全)
      -->
        <set name="employeeSet" cascade="save-update">

关系维护

<!--
           inverse 关系维护
           true 放弃维护
           false 维护(默认)
        -->
        <set name="employeeSet" cascade="save-update" inverse="true">

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

多对多

用户 跟角色

配置方式

bean 中双方都存在 set集合


配置文件

   <setname="userSet" table="t_user_role"  >

           <key column="roleId"></key>

            <many-to-manyclass="cn.hd.manyToMany.User"column="userId"></many-to-many>

       </set>

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值