hibernate的关系配置中有两个重要的配置项 reverse 和 cascade
inverse:在双向关联的情况下面使用,单向关联的时候不需要使用reverse配置。
cascade:用来设置相互关联的对象之间的级联操作。
一对一关系
...
一对多的关系
一对多的关系可以分为三种。
以班级(一)--学生(多)为例
1)多对一单向,是单向引用,多的一方引用少的一方,不会创建单独的关联表
由多的一方维护关系,多的一方里面包含一个少的一方的对象,关系的配置在多的一方的hbm.xml文件之中,而不是在hibernate的配置文件之中。
不设置级联(cascade)
插入学生的时候报错,需要先插入班级再插入学生
当删除学生的时候正常,不会删除关联的班级
插入班级的时候正常
删除班级的时候报错,提示要先删除学生
设置级联(cascade)
插入学生的时候,框架会自动先插入对应的班级,再插入学生
删除班级的时候,框架自动删除所属这个班级下的所有学生,再删除班级(测试没有成功,还是出现提示错误)
从两个端保存的顺序一致,保存顺序:先保存一的一端,拿到一的一端的ID,再保存多的一端
2)一对多单向,也是单向引用,少的一方引用多的一方,不会创建单独的关联表
由少的一方维护关系,少的一方包含一个多的一方的集合,关系配置在少的一方的hbm.xml文件之中,而不是在hibernate的配置文件之中。
不设置级联
在插入班级的时候报错,需要先插入关联的学生对象,再插入班级。
在删除班级的时候正常,不会删除关联的学生
在插入学生的时候正常
在删除学生的时候正常,不会删除关联的班级
设置级联
插入班级的时候,框架会自动先插入关联的学生,再插入班级。
从两个端保存的顺序一致,保存顺序:先保存多的一端,再保存一的一端,最后将一的一端的ID设置到多的一端
小结:无论是多对一,还是一对多,保存的时候,有如下原则:
先保存对端,再保存本端
3)一对多双向,双向引用,多的一方会引用少的一方,少的一方也会引用多的一方。不会创建单独的关系表。双方都设置级联。
这里的双向指的是双方都有对方的引用,而不是指两方同时维护关系。默认是少的一方维护关系,可以通过inverse设置由多的一方维护关系。多的一方包含少的一方的对象,少的一方包含多的一方的集合。关系需要在多的一方的hbm.xml文件和少的一方的hbm.xml文件中同时配置。
不加inverse的情况下,默认是少的一方维护关系,即等同于一对多单向。如果设置inverse为true,则为多的一方维护关系,即等同于多对一单向。