Hibernate和数据库表的关系配置

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

一对一  一对多  多对多

 

比如公司表和员工表

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

  再比如用户和角色

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

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

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

 

 

一对多

一对多的关系如何维护

我们会把一中的主键存在多的表中,在多中存了一的主键叫做外键

 

Hibernate中维护的方式:

 

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

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

 


配置文件配置的方式:

在多中(职工中)

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

 

   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集合

 

 

 

 

 

 

 

 

 

 

 

 

 

在配置文件中如何实现

 

配置文件中的配置

 

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

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

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

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

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

 

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

 

<set name="roleSet" table="t_user_role" cascade="save-update">
    <key column="userId"></key>
    <many-to-many class="cn.hd.manyToMany.Role" column="roleId"></many-to-many>
</set>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值