hibernate第三天
多表关系在hibernate中的表达
多表关系:
多对一|一对多
多对多
一对一(不存在)
举例:
多对一:商品和分类
一对多:客户和订单
一对多|多对一
一对多|多对一的关系表达:
1.表中的表达
2.实体中的表达
3.orm元数据中的表达
一对多的一方:
<!-- 集合,将一对多关系在配置文件中体现出来 -->
<!--
name属性:集合属性名
key属性:外键列名
one-to-many:一对多关系 class与谁的关系 配该类完整包名
-->
<set name="linkMens">
<key column="lkm_cust_id"></key>
<one-to-many class="LinkMan"/>
</set>
多对一的一方
<!-- 多对一 -->
<!--
name属性:集合属性名
key属性:外键列名
many-to-one:多对一关系 class与谁的关系 配该类完整包名
-->
<many-to-one name="customer" column="lkm_cust_id" class="Customer"></many-to-one>
操作
级联操作:
<!--
级联操作:cascade
save-update:级联保存更新
delete:级联删除
all:save-update+delete
级联操作: 简化操作,目的:少写两行代码
-->
结论:简化操作,一定要用的话,建议使用save-update,不建议使用delete
关系维护
在保存时,两方都会维护外键关系,外键关系维护了两次,冗余了,多余的维护关系语句,显然是客户这一端在维护关系
<!--
inverse属性:配置关系是否维护
true:不维护关系
false(默认值):维护关系
-->
结论:性能优化,提高关系维护的性能
维护关系的原则
原则:总有一方必须维护关系,多的一方是不能放弃维护关系的
注意:1.如果一的一方不维护关系,那么维护关系的代码可以省略
2.删除的时候,a.解除关系(维护关系) b.级联删除(级联操作)
多对多
1.表中表达
2.实体中的表达
3.orm元数据中的表达
<!-- 多对多关系表达 -->
<!--
name:集合属性
table:配置中间表名
key
|-column:外键,别人引用"我"的外键列名
many-to-many:
class:我与哪个类是多对多关系
column:我引用别人的外键列名
-->
操作:
结论:在开发中,如果遇到多对多关系,一定要先选择一方放弃维护关系(一般选择谁来放弃的时候要看业务方向,例如:录入员工时,需要为员工指定所属角色,那么业务方向就是由员工维护角色,角色不需要维护与员工的关系,角色放弃维护)
练习: