Hibernate框架学习笔记03

1.一对多|多对一

(1)关系表达
1.表中的表达

这里写图片描述

2.实体中的表达

这里写图片描述

3.orm元数据中表达
一对多:
<!-- 集合,一对多关系,在配置文件中配置 -->
<!-- name属性:集合属性名
     key属性:外键列名
     class属性:与我关联的对象的完整列名 -->
<set name="linkMans" inverse="true" cascade="delete" >
    <key column="lkm_cust_id"></key>
    <one-to-many class="LinkMan"/>
</set>
多对一
<!-- 多对一 -->
<!-- name属性:引用属性名
     column属性:外键列名
     class属性:与我相关联的对象的完整列名 -->
<many-to-one name="customer" column="lkm_cust_id" class="Customer" ></many-to-one>
(2)操作
1.操作关联属性
//保存客户以及客户下的联系人
Customer c = new Customer();
c.setCust_name("google");

LinkMan l1 = new LinkMan();
l1.setLkm_name("g11");
LinkMan l2 = new LinkMan();
l2.setLkm_name("g22");

//表达一对多,一个客户下有多个联系人
c.getLinkMans().add(l1);
c.getLinkMans().add(l2);
//表达多对一,联系人属于哪个客户
l1.setCustomer(c);
l2.setCustomer(c);
//对象由瞬时态转换为持久态
session.save(c);
session.save(l1);
session.save(l2);
(3)进阶操作
1.级联操作
<!-- 级联操作 cascade
     save-update:级联保存更新
      delete:级联删除
      all;  save-update+delete
      级联操作:简化操作,目的是为了少写两行代码
-->
结论: 简化操作.一定要用,save-update,不建议使用delete.
2.关系维护

这里写图片描述
在保存时.两方都会维护外键关系.关系维护两次,冗余了. 多余的维护关系语句,显然是客户这一端在维护关系

<!-- inverse属性:配置关系是否维护 
     true: customer不维护
     false:(默认) customer维护关系
     inverse属性:性能优化,提高关系维护的性能
     原则:无论如何放弃,总有一方需要维护关系
     一对多关系中,一的一方放弃,也只能一的一方放弃,多的一方不能放弃,因为外键字段在多的一方-->
<set name="linkMans" inverse="true" cascade="delete" >

2.多对多

(1)关系表达
1.表中表达

这里写图片描述

2.实体中表达

这里写图片描述

3.orm元数据中表达
<!-- 多对多关系表达 -->
<!-- name:集合属性名
     table:配置中间表名
     key:column:外键,别人引用我的外键列名
     class:我与哪个类是多对多关系
     column:外键,我引用此人的外键列名 -->
<set name="roles" table="sys_user_role" cascade="save-update">
    <key column="user_id"></key>
    <many-to-many class="Role" column="role_id"></many-to-many>
</set>
(2)操作
操作关联属性
//用户表达关系
u1.getRoles().add(r1);
u1.getRoles().add(r2);

u2.getRoles().add(r1);
u2.getRoles().add(r2);
//角色表达关系
r1.getUsers().add(u1);
r1.getUsers().add(u2);

r2.getUsers().add(u1);
r2.getUsers().add(u2);
//调用save方法依次保存
session.save(u1);
session.save(u2);
session.save(r1);
session.save(r2);
(3)进阶操作
1.级联操作
<!-- cascade:级联操作
    save-update:级联保存更新
    delete:级联删除
    all:级联保存更新+级联删除
 结论:cascade简化代码书写,该属性使用不使用都可以,建议要用只用save-update
 如果使用delete操作太过危险,尤其在多对多中不建议使用 -->
<set name="roles" table="sys_user_role" cascade="save-update">
<key column="user_id"></key>
<many-to-many class="Role" column="role_id"></many-to-many>
</set>
2.关系维护
<!-- 添加inverse属性 
     true:放弃维护外键关系
     false:(默认值)
     结论:在将来的开发中,如果遇到多对多关系,一定要选择一方放弃维护关系
         一般谁来放弃需要看业务方向,例如录入员工时,需要为员工指定所属角色,
      name业务方向就是由员工来维护角色,角色不需要维护与员工关系,角色放弃维护-->
<set name="users" table="sys_user_role" inverse="true" >
    <key column="role_id"></key>
    <many-to-many class="User" column="user_id"></many-to-many>
</set>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值