前言
这篇文章主要是说级联的保存,比较重要的概念是。
保存客户级联联系人,那么配置应该写在客户的配置上。
分析
技术分析之级联保存
1. 测试:如果现在代码只插入其中的一方的数据
* 如果只保存其中的一方的数据,那么程序会抛出异常。
* 如果想完成只保存一方的数据,并且把相关联的数据都保存到数据库中,那么需要配置级联!!
* 级联保存是方向性
2. 级联保存效果
* 级联保存:保存一方同时可以把关联的对象也保存到数据库中!!
* 使用cascade="save-update"
以下是单项关联,只要在mapping文件中设置cascade="save-update"就可以。
/**
* 级联保存:保存联系人,级联客户
*/
@Test
public void run4(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 保存客户和联系人的数据
Customer c1 = new Customer();
c1.setCust_name("美美");
// 创建2个联系人
Linkman l1 = new Linkman();
l1.setLkm_name("熊大");
Linkman l2 = new Linkman();
l2.setLkm_name("熊二");
// 使用联系人关联客户
l1.setCustomer(c1);
l2.setCustomer(c1);
// 保存
session.save(l1);
// 没有保存2个联系人
session.save(l2);
tr.commit();
}
/**
* 级联保存:保存客户,级联联系人
*/
@Test
public void run3(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 保存客户和联系人的数据
Customer c1 = new Customer();
c1.setCust_name("美美");
// 创建2个联系人
Linkman l1 = new Linkman();
l1.setLkm_name("熊大");
Linkman l2 = new Linkman();
l2.setLkm_name("熊二");
// 单向关联
c1.getLinkmans().add(l1);
c1.getLinkmans().add(l2);
// 保存数据
session.save(c1);
tr.commit();
}
以下是双向关联,两边配置文件都要配置好:
/**
* 测试级联保存
*/
@Test
public void run5(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 保存客户和联系人的数据
Customer c1 = new Customer();
c1.setCust_name("美美");
// 创建2个联系人
Linkman l1 = new Linkman();
l1.setLkm_name("熊大");
Linkman l2 = new Linkman();
l2.setLkm_name("熊二");
l1.setCustomer(c1);
c1.getLinkmans().add(l2);
session.save(l1);
tr.commit();
}