Java进阶之hibernate中cascade与inverse

来源:互联网 发布:小美工作室淘宝真假 编辑:程序博客网 时间:2024/05/27 14:12

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

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


linkman.hbm.xml中为:


测试代码如下:

public class TestDemo4 {@Testpublic 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 了所以客户关联的联系人会进入到数据库中,但是客户一段放弃了外键维护权,所以联系人插入到数据会是没有外键的。

0 0