我们都知道的是cascade强调的是操作关联对象,inverse强调的是外键的维护权。在我们设置了级联操作后,在保存的时候就会级联保存另外的级联对象,而设置了inverse之后,如果两个对象之间有双向维护关系,就会在设置的一方放弃外键维护权,那它们两个共同使用的时候会产生什么结果呢?
我们可以通过一个简单的案例测试一下,就能得到结果,案例中customer与linkman为一对多关系,它们的映射文件配置截图如下: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 了所以客户关联的联系人会进入到数据库中,但是客户一段放弃了外键维护权,所以联系人插入到数据会是没有外键的。