hibernate中一对多表关系操作(7)

1、基本操作,保存客户、联系人,并设置它们的关联

public void test01(){
		Session session = HibernateUtils.OpenSession();
		Transaction tx = session.beginTransaction();
		
		Customer customer = new Customer();
		customer.setCust_name("传播智客");
		
		LinkMan lm1 = new LinkMan();
		lm1.setLkm_name("黎活明");
		
		LinkMan lm2 = new LinkMan();
		lm2.setLkm_name("刘悦东");
		
		//表达一对多,一个客户下有多个联系人
		customer.getLinkMens().add(lm1);
		customer.getLinkMens().add(lm2);
		
		//表达多对一,联系人属于哪个客户
		lm1.setCustomer(customer);
		lm2.setCustomer(customer);
		
		//瞬时态-->持久态
		session.save(customer);
		session.save(lm1);
		session.save(lm2);
		
			
		tx.commit();
		session.close();
	}

2、为客户添加联系人

@Test
	public void test02(){
		Session session = HibernateUtils.OpenSession();
		Transaction tx = session.beginTransaction();
		
		//获得要操作的客户
		Customer customer = session.get(Customer.class, 1l);
		
		//创建联系人对象
		LinkMan lm = new LinkMan();
		lm.setLkm_name("郝强勇");
		
		//将联系人添加到客户对象中
		customer.getLinkMens().add(lm);
		//设置联系人的客户
		lm.setCustomer(customer);
		
		//执行保存
		session.save(lm);
		
		
			
		tx.commit();
		session.close();
	}

3、为客户删除联系人

public void test03(){
		Session session = HibernateUtils.OpenSession();
		Transaction tx = session.beginTransaction();
		
		//获得要操作的客户
		Customer customer = session.get(Customer.class, 1l);
		
		//获得要删除的联系人
		LinkMan lm = session.get(LinkMan.class, 3l);
		
		
		//将联系人从客户对象中移除
		customer.getLinkMens().remove(lm);
		//设置联系人的客户为空
		lm.setCustomer(null);
			
		tx.commit();
		session.close();
	}

一对多表操作进阶---级联操作:

一的一方的映射文件配置:

<!-- 
级联操作:cascade
save-update:级联保存
delete:级联删除
all:save-update+delete
 -->
<set name="linkMens" cascade="save-update">
    <key column="lkm_cust_id"></key>
    <one-to-many class="LinkMan"/>
</set>


public void test01(){
		Session session = HibernateUtils.OpenSession();
		Transaction tx = session.beginTransaction();
		
		Customer customer = new Customer();
		customer.setCust_name("传播智客");
		
		LinkMan lm1 = new LinkMan();
		lm1.setLkm_name("黎活明");
		
		LinkMan lm2 = new LinkMan();
		lm2.setLkm_name("刘悦东");
		
		//表达一对多,一个客户下有多个联系人
		customer.getLinkMens().add(lm1);
		customer.getLinkMens().add(lm2);
		
		//表达多对一,联系人属于哪个客户
		lm1.setCustomer(customer);
		lm2.setCustomer(customer);
		
		//瞬时态-->持久态,级联保存
		session.save(customer);
		//session.save(lm1);
		//session.save(lm2);
		
			
		tx.commit();
		session.close();
	}

2、级联删除

public void test04(){
		Session session = HibernateUtils.OpenSession();
		Transaction tx = session.beginTransaction();
		
		//级联删除
		Customer customer = session.get(Customer.class, 1l);
		session.delete(customer);
			
		tx.commit();
		session.close();
	}

目的:简化操作,一般使用save-update,不建议使用delete。

3、关系维护

在保存时,两方都会维护外键关系,关系维护了两次,冗余了。多余的关系维护语句,显然是客户端在维护外键关系。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值