hibernate的inverse和cascade属性
2016-03-10 10:03
387 查看
nverse属性
Inverse属性,是在维护关联关系的时候起作用的。表示控制权是否转移。(在一的一方起作用)
Inverse , 控制反转。
Inverse = false 不反转; 当前方有控制权
True 控制反转; 当前方没有控制权
维护关联关系中,是否设置inverse属性:
1. 保存数据
有影响。
如果设置控制反转,即inverse=true, 然后通过部门方维护关联关系。在保存部门的时候,同时保存员工, 数据会保存,但关联关系不会维护。即外键字段为NULL
2. 获取数据
无。
3. 解除关联关系?
有影响。
inverse=false, 可以解除关联
inverse=true, 当前方(部门)没有控制权,不能解除关联关系
(不会生成update语句,也不会报错)
4. 删除数据对关联关系的影响?
有影响。
inverse=false, 有控制权, 可以删除。先清空外键引用,再删除数据。
inverse=true, 没有控制权: 如果删除的记录有被外键引用,会报错,违反主外键引用约束! 如果删除的记录没有被引用,可以直接删除。
cascade 属性
cascade 表示级联操作 【可以设置到一的一方或多的一方】none 不级联操作, 默认值
save-update 级联保存或更新
delete 级联删除
save-update,delete 级联保存、更新、删除
all 同上。级联保存、更新、删除
inverse和cascade的区别:
1.cascade(级联)
引用了《深入浅出 Hibernate》:级联(cascade)在Hibernate映射关系中,它指的是当主控方执行操作时,关联对象(被动方)是否同步执行同一操作,如主控方对象调用save-update或delete 方法时,是否同事对关联对象(被动方)进行save-update或delete。
这里所说的主控方按我理解指的是:比如,User 类中有一Address属性,User和Address 是一对多的关系,然后当user.save(address);的时候,user就是主控方了。
2、inverse(控制方向反转)
引用了《深入浅出 Hibernate》:在Hibernate 语义中,inverse指定了关联关系中的方向。关联关系中,inverse=false 的为主动方,由主动方负责维护关联关系。
这里所说的关联关系按我理解指的是:为了维持两个实体类(表)的关系,而添加的一些属性,该属性可能在两个实体类(表)或者在一个独立的表里面,这个要看这双方直接的对应关系了:
ps:这里的维护指的是当主控放进行增删改查操作时,会同时对关联关系进行对应的更新。
一对多:该属性在多的一方。应该在一方的设置 inverse=true ,多的一方设置 inverse=false(多的一方也可以不设置inverse属性,因为默认值是false),这说明关联关系由多的一方来维护。原因:该关联关系的属性在多的一方的表中,在维护关联关系的时候在多的一方容易维护。
多对多:属性在独立表中。在任意一方设置inverse=true,另一方inverse=false;原因:如果两个多设置为true 的话,表示两方都对关联关系表(独立表)进行了同样的维护,其实只要一方维护就行了,效率上来说,这样设置是合理点的。
一对一:其实是一对多的一个特例,inverse 的设置也是一样的,主要还是看关联关系的属性在哪一方,这一方的inverse=false。
多对一:也就是一对多的反过来,没什么区别。
/* *1. 在inverse属性为false时,可以通过一方直接保存和多方的关联关系 */ /* * 2.在inverse属性为true时,不可以通过一方直接保存和多方的关联关系 */ /* *3. 在inverse属性为false时,并且级联保存,可以通过一方直接保存和多方的关联关系 */ /* *4. 在inverse属性为false时,并且级联保存,不可以通过一方直接保存和多方的关联关系 */ // 部门对象 Dept dept = new Dept(); dept.setDept_name("应用部"); // 员工对象 Employee emp_zs = new Employee("啊行",1000,dept); Employee emp_ls = new Employee("阿横",2000,dept); // 关系 dept.getEmpSet().add(emp_zs); dept.getEmpSet().add(emp_ls); // 保存 session.save(dept); // 保存部门,部门下所有的员工
相关文章推荐
- 对腐蚀 和 膨胀 的理解
- panel的常见用法小计
- 【转】Android开发学习笔记(一)——初识Android
- Mybtis框架总结(一)
- linux文件的权限说明
- 自定义导航searchBar
- centos6.7 mini 安装oracle jdk 1.8
- 打开系统东西
- Angular零星知识点(二)
- [算法系列之四]优先级队列
- handle 与 Message
- spring 事务管理不起作用原因分析与解决
- pig学习笔记——运行与语法
- 真机调试报错:The identity used to sign the executable is no longer valid
- 字典赋值给模型
- ubuntu安装openssh-server 报依赖错误的解决过程
- ICT测试点是干什么的, 怎么设置!
- 好用的man page
- android的SQLiteDatabase操作类
- 2696: 航班安排 费用流