Java进阶之hibernate中cascade与inverse

8 篇文章 3 订阅
7 篇文章 2 订阅

     我们都知道的是cascade强调的是操作关联对象,inverse强调的是外键的维护权。在我们设置了级联操作后,在保存的时候就会级联保存另外的级联对象,而设置了inverse之后,如果两个对象之间有双向维护关系,就会在设置的一方放弃外键维护权,那它们两个共同使用的时候会产生什么结果呢?

     我们可以通过一个简单的案例测试一下,就能得到结果,案例中customerlinkman为一对多关系,它们的映射文件配置截图如下:customer.hbm.xml中为:


linkman.hbm.xml中为:


测试代码如下:

public class TestDemo4 {
	@Test
	public void test(){
		Session session=HibernateUtils.getCurrentSession();
		Transaction transaction=session.beginTransaction();
		// 客户customer与联系人linkman为一对多关系
		Customer customer =new Customer();
		customer.setCust_name("客户1");
		
		LinkMan linkMan=new LinkMan();
		linkMan.setLkm_name("小李");
		//在Customer.hbm.xml中的set上配置cascade="save-update" inverse="true"
		customer.getLinkMans().add(linkMan);
		
		session.save(customer);
		transaction.commit();
	}
}
数据库中的customer表的内容显示:


linkman表的内容显示:


     这个时候我们会发现,如果在set集合上配置cascade="save-update" inverse="true"了,那么执行保存客户的操作,会发现客户和联系人都进入到数据库中了,但是没有外键,是因为配置了cascade 了所以客户关联的联系人会进入到数据库中,但是客户一段放弃了外键维护权,所以联系人插入到数据会是没有外键的。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值