Hibernate的学习之路二十一(一对多的级联保存)

前言

     这篇文章主要是说级联的保存,比较重要的概念是。
     保存客户级联联系人,那么配置应该写在客户的配置上。

分析


技术分析之级联保存

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();
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值