wap网站开发 费用,wordpress链接跳转页面,wordpress教程 下载地址,ppt怎么做流程图Inverse属性 Inverse属性#xff1a;表示控制权是否转移.. true:控制权已转移【当前一方没有控制权】false#xff1a;控制权没有转移【当前一方有控制权】Inverse属性#xff0c;是在维护关联关系的时候起作用的。只能在“一”的一方中使用该属性#xff01;Inverse属性的…Inverse属性 Inverse属性表示控制权是否转移.. true:控制权已转移【当前一方没有控制权】false控制权没有转移【当前一方有控制权】Inverse属性是在维护关联关系的时候起作用的。只能在“一”的一方中使用该属性Inverse属性的默认值为fasle也就是当前一方是有控制权的 从一下的几个方面看看Inverse在维护关联关系时是否起作用 保存数据获取数据解除关联关系删除数据对关联关系的影响保存数据 将inverse属性设置为ture使dept没有控制权 !--维护关系的是Set集合对应employee表--set cascadesave-update nameset tableemployee inversetrue 执行保存数据操作时发现Hibernate只执行了三条SQL语句。employee表的外键并没有数据 结论如果设置控制反转,即inversetrue, 然后通过部门方维护关联关系。在保存部门的时候同时保存员工 数据会保存但关联关系不会维护。即外键字段为NULL 查询数据 设置inverse属性为true那么部门一方是没有控制权的。 set cascadesave-update nameset tableemployee inversetrue我们在查看数据的时候发现inverse属性对查询数据是没有影响的 //查询出Dept对象Dept de (Dept) session.get(Dept.class, 1);System.out.println(dept.getDeptName());System.out.println(-----------);//用到的时候再查询数据库Hibernate的懒加载【后面会讲解】System.out.println(de.getSet());解除关联关系 部门和员工是存在外键的联系的我们接下来看看inverse属性对于解除关联关系有没有影响 当部门一方有权限时即inverse属性为false//查找部门id为1的信息Dept dept1 (Dept) session.get(Dept.class, 1);//清除关联信息dept1.getSet().clear(); 可以解除关联关系employee的外键字段被设置为NULL了 当部门一方没有权限时即inverse属性为true//查找部门id为2的信息Dept dept1 (Dept) session.get(Dept.class, 2);//清除关联信息dept1.getSet().clear(); 不能解除关联关系 删除数据对关联关系的影响 当部门一方有权限时即inverse属性为false //查找部门id为2的信息Dept dept1 (Dept) session.get(Dept.class, 2);//删除部门2session.delete(dept1); 当有控制权的时候可以删除数据先把外键设置为NULL再删除数据 当部门一方没有权限时即inverse属性为true //查找部门id为1的信息Dept dept1 (Dept) session.get(Dept.class, 1);//删除部门1session.delete(dept1); 直接抛出异常说该部门拥有外键不能删除数据 cascade属性 cascade表示级联的意思简单来说就是操作某一属性时对其他关联字段的影响 casecade属性不像inverse属性只能在“一”的一方设置它可以在“一”的一方也可以在“多”的一方设置 cascade有这么几个值 none 不级联操作 默认值save-update 级联保存或更新delete 级联删除save-update,delete 级联保存、更新、删除all 同上。级联保存、更新、删除级联保存 级联保存有什么用呢我们来看个例子 如果在保存对象的时候没有把相关的对象也一并保存进数据库会出现错误。因为它会发现dept是有外键的而外键又是一个对象来保存着这个对象在数据库表中并没有存在因此会抛出异常//创建对象Dept dept new Dept();dept.setDeptName(开发部);Employee zs new Employee();zs.setEmpName(张珊);zs.setSalary(1111);Employee ls new Employee();ls.setEmpName(李四);ls.setSalary(2222);//维护关系dept.getSet().add(zs);dept.getSet().add(ls);//保存dept对象session.save(dept); 如果我们在dept中设置了级联保存那么Hibernate就会知道保存dept的数据时发现dept了外键也把dept外键的对象保存在数据库之中 set nameset tableemployee cascadesave-update 级联删除 级联删除这个对于我们来说风险太大了如果删除了某些数据会把另外有关联的数据也删除...在实际中我们一般不使用 在没有设置级联删除的时候我们试试删除dept //删除部门为3的记录Dept dept1 (Dept) session.get(dept.getClass(), 3);session.delete(dept1);它会先把3的外键对应的记录删除再删除部门的数据 在设置级联删除的时候我们试试删除deptset nameset tableemployee cascadesave-update,delete 级联删除数据//删除部门为4的记录Dept dept1 (Dept) session.get(dept.getClass(), 4);session.delete(dept1); 我们发现数据相关联的数据都没有了 cascade和inverse同时使用 上面我们已经把cascade和inverse都介绍一遍了那么cascade和inverse同时使用会怎么样呢我们来测试一下 设置dept没有控制权但设置级联保存、删除 set nameset tableemployee cascadesave-update,delete inversetrue 添加一个dept对象 //添加一个dept对象session.save(dept); 如果我们单单设置了inverse属性为true那么数据库中肯定是不能维护关联关系的【这里我们已经测试了】 但是呢现在也设置了级联保存级联保存是否可以让该对象相关的关联关系一并保存在数据库中的。 我们来看看结果 inverse的优先级是比cascade的优先级要高的因此设置了inverse属性为true那么cascade就无效了。 参考详细博文: http://www.cnblogs.com/whgk/p/6135591.html ascade和inverse总结 上面的测试都是通过几个方面的看起来有点多因此我们总结一下 inverse属性 inverse属性只能在“一”的一方中设置。inversefalse表示有控制权inverseture表示没有控制权 在保存关联信息时 有控制权---可以保存相对应的关联数据没有控制权---数据会保存但是关联关系没有维护也就是外键列为NULL在查询数据时 有无控制权对查询数据没有任何影响在解除关联关系时 有控制权---可以解除关联关系没有控制权---不能解除关联关系不会生成update语句也不会报错在删除数据时对关联关系的影响 有控制权---将外键的值设置为NULL随后删除数据没有控制权---如果删除的记录有被外键引用会报错违反主外键引用约束如果删除的记录没有被引用可以直接删除。多对多关系的时候也是一样的只不过多对多的关联关系是在中间表中 cascade属性 cascade有这么几个值 none 不级联操作 默认值save-update 级联保存或更新delete 级联删除save-update,delete 级联保存、更新、删除all 同上。级联保存、更新、删除我们可能使用到的往往是save-update这个值因为级联删除的风险太大了 级联保存 没有设置级联保存--如果单单保存一个对象而对象又存在外键时那么就会抛出异常设置了级联保存--那么就可以将对象以及有关联关系的对象一并保存级联删除 没有设置级联删除--在删除数据的时候会把外键的字段设置为NULL再删除当前一方的记录设置了级联删除--把对象有关联关系的记录都删除了如果cascade和inverse同时设置时 inverse属性优先级是要比cascade要高的如果inverse属性设置了true那么cascade就无效了! 如果文章有错的地方欢迎指正大家互相交流。习惯在微信看技术文章想要获取更多的Java资源的同学可以关注微信公众号:Java3y 转载于:https://www.cnblogs.com/Java3y/p/8529866.html