Hibernate二之对象关系

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,则为多的一方维护关系,即等同于多对一单向。

猜你喜欢

转载自blog.csdn.net/w450093854/article/details/84111089
今日推荐