Hibernate复杂表的关系

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

11   1对多   多对多

1对多:  比如公司表和员工表,一个公司可以有多名员工,而一个员工只能在一个公司

多对多:  用户和角色,

用户有 吕佳伟赵赛昌 2个 角色有 总监 组长 普通员工

这个时候1个用户有多个角色 吕佳伟既是总监又是组长

同时 总监这个角色有多个用户跟他对应吕佳伟和赵赛昌都是总监 这样的表和

表之间的关系就是多对多

          

1对多的关系 如何维护

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

 

Hibernate中维护的方式:

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


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

配置文件配置的方式

在多中(员工)

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

Name 在类中的属性名

class 多的一方的类名

colum 生成外键的字段名

1中(公司)

<set name="employeeSet"><!--bean类里的属性名-->
   
<key column="enterpriseId"></key><!--外键-->
   
<one-to-many class="cn.hd.bean.Employee"></one-to-many><!--一对多-->
</set>

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

Key就是外键

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

 

级联操作:

在保存企业的同时,将这个企业中所有员工也同时保存,这样就少写了保存的代码


关系维护

inverse(关系维护):
                   true
放弃维护
                   false
维护(默认的值)

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

 

原则:1对多关系 多的一方维护(员工)  1的一方放弃维护(公司)

 

多对多

用户 跟 角色


配置方式

bean类中双方都存set集合

角色

员工

角色 配置文件中的配置

<set name="userSet" table="t_user_role">
    <
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"inverse="true">
    <
key column="userId"></key>
    <
many-to-many class="cn.hd.manyToMany.Role" column="roleId"></many-to-many>
    </
set>

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

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

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

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值