11.27--一对多关联映射

一对多关联映射


单向

一对多和多对一映射原理是一样的,都是在多的一端加入一个外键指向一的一端;

区别在于维护的关系不同:

  • 多对一维护的关系:多指向一的关系,如果维护了多指向一的关系,那么加载多的时候会把一加载上来;
  • 一对多维护的关系:一指向多的关系,如果维护了一指向多的关系,那么加载一的时候会把多加载上来。

classes——》student

table-classes: id , name

classes.java: id,  name,  Set < Student > students

classes.xml: id , name , 
< Set name="students" cascade="">
    cascade级联操作属性:save-update、delete、all、none。
    < key column="classId" /> //classId,谁维护谁加classes
    < one-to-many  class="com.entity.Strudent" />
< /Set >

classes.xml

table-student: id, name , classId

student.java: id, name, 

student.xml: id , name,

student.xml

在一一端维护关系存在缺陷:

因为多的一端student不知道classes的存在(也就是student没有维护与classes的关系),所以在保存student的时候关系字段classesId是为null的,如果将该字段设置为非空,则将无法保存数据

另外,因为student不维护关系,而classes维护关系,classes就会发出多余的update语句,保证classes和student有关系,这样加载classes的时候才可以把该classes对应的学生加载上来。

映射双向的目的是,有时候不是因为需求,而是为了让多的一端维护关系
存储,加载


双向

student.xml

采用一对多双向关联映射的目的主要是为了解决一对多单向的缺陷,而不是需求驱动。

一对多双向关联的映射方式:

  • 在一的一端的集合上采用< key>标签,在多的一端加入一个外键
  • 在多的一端采用< many-to-one>标签

< key>标签和< many-to-one>标签加入的字段保持一致,否则会产生数据混乱

inverse属性:

inverse属性可以用在一对多和多对多双向关联上,inverse属性默认为false,为false表示本端可以维护关系,如果inverse为true,则本端不能维护关系,会交给另一端维护关系,本端失效
所以,一对多关联映射我们通常在多的一端维护关系,让一的一端失效,故设置为inverse=“true”

inverse和cascade

inverse是控制方向上的反转,只影响存储
cascade是操作上的连锁反应

猜你喜欢

转载自blog.csdn.net/qq_30625315/article/details/78649432
今日推荐