本篇介绍一下Hibernate的一对多|多对一、多对多等关系的操作。如果对于Hibernate的基本配置还不熟悉请移步到
一.一对多|多对一关系
1.关系表达
1.1 表中的表达
1.2 实体中表达
1.3 ORM元数据的表达
<!-- 集合,一对多关系,在配置文件中配置 -->
<!--
name属性:集合属性名
column属性: 外键列名 与多对一的外键名字一致
class属性: 与我关联的对象完整类名
-->
<set name="linkMens">
<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.代码演示
Customer c = new Customer();
c.setCust_name("天元陆兵");
LinkMan lm1 = new LinkMan();
lm1.setLkm_name("张三");
LinkMan lm2 = new LinkMan();
lm2.setLkm_name("李四");
//表达一对多,客户下有多个联系人
c.getLinkMens().add(lm1);
c.getLinkMens().add(lm2);
//表达多对一,联系人属于哪个客户
lm1.setCustomer(c);
lm2.setCustomer(c);
session.save(c);
session.save(lm1);
session.save(lm2);
3.代码演示(进阶)
3.1 级联操作 ------简化操作(如果使用建议用 save-update)
3.2 关系维护 如果存在关系维护,操作删除时直接会设置为null。
默认情况下,双方都在维护关系,这样势必造成冗余。如果一的一方也在维护关系,这是也可以在程序中将多的一方关系维护语句屏蔽掉。但是如果一的一方一旦放弃关系维护,就不能将多的一方的关系维护也屏蔽了。
//3操作
//1> 获得要操作的客户对象
Customer c = session.get(Customer.class,1l);
//2> 创建联系人
LinkMan lm1 = new LinkMan();
lm1.setLkm_name("赵六");
//3> 将联系人添加到客户,将客户设置到联系人中
c.getLinkMens().add(lm1);
//lm1.setCustomer(c);//客户在维护关系时,屏蔽这一句也是可以的,如果客户不再维护关系,就要放开这句。
//4> 执行保存
session.save(lm1);
二.多对多
1.关系表达
1.1 表中的表达
1.2 对象中表达
1.3 orm元数据
2.代码演示
2.1 操作关联属性
3 .进阶
3.1 inverse属性
3.2 cascade属性