08 Hibernate一对多关联关系映射

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

—高级软件人才实作培训专家!北京传智播客教育一对多关联关系映射—高级软件人才实作培训专家!北京传智播客教育一对多数据库表(一方)创建教师表,用于描述一对多中的一方—高级软件人才实作培训专家!北京传智播客教育一对多数据库表(多方)创建学生表,用于描述一对多中的多方,并在表中设计一对多的外键关系(teacherUuid字段)—高级软件人才实作培训专家!北京传智播客教育一对多模型(一方)创建教师类,用于描述一对多中的一方,并在类中描述一个老师对应多个学生的关系由于学生信息不能重复,因此使用Set集合进行描述Set集合初始化为任意Set模型集合,推荐使用HashSet—高级软件人才实作培训专家!北京传智播客教育一对多模型(多方)创建学生类,用于描述一对多中的多方,并在类中描述一个学生对应一个老师的关系—高级软件人才实作培训专家!北京传智播客教育一对多配置关系(一方)创建教师模型配置文件TeacherModel.hbm.xml,用于描述一对多中的一方,并在描述中添加对应关系一对多关系中一方包含有多方的集合,因此要在配置文件中描述多方的数据集合—高级软件人才实作培训专家!北京传智播客教育一对多配置关系(属性)在class配置中设置set集合与模型中的Set集合对应setname=students/setname:模型中Set集合的对象名称在set配置中添加一对多的模型关系one-to-manyclass=cn.itcast.h3.one2many.vo.StudentModel/class:一对多关系中多方数据模型类名在set配置中添加keycolumn=teacherUuid/keycolumn:一对多关系中多方数据库表的外键字段名注意:配置在one-to-many上方—高级软件人才实作培训专家!北京传智播客教育一对多配置关系(多方)创建学生模型配置文件StudentModel.hbm.xml,用于描述一对多中的多方,并在描述中添加对应关系一对多关系中多方需要在配置文件中描述多对一的关系—高级软件人才实作培训专家!北京传智播客教育一对多配置关系(属性)在class配置中设置多对一的关系many-to-onename=teacherclass=cn.itcast.h3.one2many.vo.TeacherModelcolumn=teacherUuid/name:模型中一方对象名称class:一对多关系中一方数据模型类名column:一对多关系中多方数据库表的外键字段名—高级软件人才实作培训专家!北京传智播客教育一对多关系资源注册最后将两个资源文件全部注册到系统配置中mappingresource=cn/itcast/h3/one2many/vo/TeacherModel.hbm.xml/mappingresource=cn/itcast/h3/one2many/vo/StudentModel.hbm.xml/一对多关系配置完成—高级软件人才实作培训专家!北京传智播客教育建立一对多关系总结在两个模型类中根据对应关系添加对应的对象一方:添加多方对象Set集合多方:添加一方对象在映射文件中配置关系一方:添加set集合配置set多方:添加多对一关系many-to-one数据库表根据需求在多方表中添加一方表的外键—高级软件人才实作培训专家!北京传智播客教育基于一对多关系的操作(添加数据)一方单独添加(无关联关系)一方在单独添加数据时,因为不存在多方的对象,无需配置关系—高级软件人才实作培训专家!北京传智播客教育基于一对多关系的操作(添加数据)多方单独添加(无关联关系)多方在单独添加数据时,数据库表中需要配置其对应的外键,而此时不建立关系进行添加可以成功—高级软件人才实作培训专家!北京传智播客教育基于一对多关系的操作(添加数据)一方与多方同时添加数据,并互相建立关系创建一方对象创建多方对象建立从一方到多方关系建立从多方到一方关系保存一方对象保存多方对象—高级软件人才实作培训专家!北京传智播客教育基于一对多关系的操作(添加数据)一方单独添加(有关联关系)如果仅添加一方数据而多方数据不进行添加,此时一方数据调用了保存方法其状态为PO,多方数据没有调用保存方法,其状态为TO。PO在保存时如果关联了TO对象会抛出持久化对象关联了瞬时对象的异常—高级软件人才实作培训专家!北京传智播客教育基于一对多关系的操作(级联添加)一方单独添加(有关联关系)失败的解决方案:PO对象在关联到TO对象时,由于相互之间建立了关系,属于强绑定,如果想完成对PO对象的添加,必须将TO对象也伴随着添加,这种现象称为级联添加设置一方对象添加模式为级联添加模型,级联设置时具有方向性,总的原则是是PO级联TO进行操作,级联设置在PO对应的配置文件中如果一方级联多方如果多方级联一方—高级软件人才实作培训专家!北京传智播客教育级联添加案例问题:进行如下操作后,添加几条数据?添加学生2添加教师添加学生1教师学生1学生2学生3教师与学生做了双向级联蓝色箭头描述了关联关系—高级软件人才实作培训专家!北京传智播客教育基于一对多关系的操作(删除数据)在实际业务中,常遇到如下关联数据多个订单隶属于一个客户多个日程隶属于一个用户多个课程成绩隶属于一个学生多个学员隶属于一名老师多个员工隶属于一个部门多张车票隶属于一趟列车删除相关业务操作如下几种删除左侧多个中一个或者多个数据,保留右侧单个数据删除左侧多个中一个或者多个数据,不保留右侧单个数据删除右侧单个数据,同时删除左侧所有数据—高级软件人才实作培训专家!北京传智播客教育基于一对多关系的操作(删除数据)删除一对多关联关系中多方的数据,保留一方相关的数据使用原始的删除操作即可完成删除一对多关联关系中一方的数据,保留一方相关的数据使用原始的删除操作即可完成此时首先执行更新操作,将一方数据对应的多方数据的外键修改为null。因为一方数据已经被删除,所以多方数据无法进行关联,因此设置为null注意:如果数据库表的外键字段设置为允许为空,此时将抛出异常—高级软件人才实作培训专家!北京传智播客教育基于一对多关系的操作(级联删除)(重点)删除一对多关联关系中一方的数据,同时删除所有多方相关的数据——级联删除需要对一方数据进行配置,要求删除一方数据时,将对应的多方数据中外键值匹配的数据全部删除掉修改TeacherModel.hbm.xml—高级软件人才实作培训专家!北京传智播客教育基于一对多关系的操作(级联删除)级联删除要求被删除的数据必须是PO,因此在删除前需要首先将被操作对象状态设置为PO使用查询方法,将对象设置为PO,然后进行删除操作删除时首先执行update操作,将被关联的多方数据外键设置为null。如果多方对象的外键设置为不能为空,则程序又会出现异常—高级软件人才实作培训专家!北京传智播客教育基于一对多关系的操作(孤子删除)在实际业务中,常遇到如下情况顾客A通过购物网站,下了4份订单,但是发现其中有一种商品重复购买了,顾客取消了其中一份订单以上问题中出现了下面描述的现象当存在一对多关联关系的数据中,一方数据取消对多方数据中一条或多条数据的关联,此时被取消关系的数据仍然存在,长此以往,数据库中将出现大量的垃圾数据,必须进行系统维护,如果该数据量十分庞大,对服务器具有很大的压力(实际情况…null是不会出现的)—高级软件人才实作培训专家!北京传智播客教育基于一对多关系的操作(孤子删除)在一对多的关联关系中,如果断开了一对多的关联关系,直接将多方被关联数据清除——孤儿删除完成上述操作需要如下步骤先将要解除关系的两个对象转换为PO解除关系配置孤儿删除策略—高级软件人才实作培训专家!北京传智播客教育属性详解—高级软件人才实作培训专家!北京传智播客教育属性详解save-update级联添加,被关联对象TO→save,DO→updatedelete:级联删除delete-orphan:孤儿删除all:除delete-orphan外所有配置all-delete-orphan:all加delete-orphan组合none:忽略级联关系(默认值)注意:cascade属性不仅维护级联对象,而且还维护级联关系—高级软件人才实作培训专家!北京传智播客教育一对多关系中的单向与双向维护在实际业务中,常遇到如下情况员工A从本部门离职,工作交接过程中,需要将员工A从本部门申请的所有固定资产交由员工B管理(临时管理),此时要将员工A对应的固定资产转义到员工B名下,也就是改变对应固定资产的所属人编号IOS班学员A转入Java班学习,需要将学员A的学籍档案绑定到Java班名下,修改学员A对应的班级编号以上问题中出现了下面描述的现象当存在级联关系的多方数据,需要将关系从一方数据A处转接到一方数据B处,此时只需要维护多方关系数据对应的模型即可如果在维护关系时,一方数据参与了维护,就会出现两次关系维护操作,给数据库服务器造成压力—高级软件人才实作培训专家!北京传智播客教育一对多关系中的单向维护与双向维护双向维护一对多关系中的双方都对关系进行维护优点:数据维护肯定能达到效果缺点:维护操作量冗余单向维护一对多关系中关联关系交由多方独立维护,一方放弃维护权优点:避免进行无效工作缺点:开发者进行关系维护时必须使用多方进行关系维护,否则问题是灾难性的操作步骤:设定非维护方不具有关系维护权限inverse=“true”—高级软件人才实作培训专家!北京传智播客教育冲突问题cascade负责级联操作对象的维护关系的维护inverse负责级联关系维护关系的维护,只影响外键两者共存且发生冲突时cascade决定了级联操作时对象的创建inverse阻止cascade对级联操作时的关系维护结论:如果配置inverse=“true”则级联操作对象将不包含关系的维护如果inverse=“false”则级联操作对象将包含关系的维护(默认)—高级软件人才实作培训专家!北京传智播客教育一对多关系总结(模型)一对多关系TeacherModel(一方)声明集合Set,用于存放多方(StudentModel)数据模型提供对应的标准封装方法一对多关系StudentModel(多方)声明一方(TeacherModel)数据模型对象提供对应的标准封装方法—高级软件人才实作培训专家!北京传智播客教育一对多关系总结(一方配置)模型中的集合名称是否参与一对多关系维护级联操作支持性一对多关系对应外键名(DB中)一对多关系(多方)对应实体类—高级软件人才实作培训专家!北京传智播客教育一对多关系总结(多方配置)模型中的关系对象名称一对多关系(一方)对应实体类一对多关系对应外键名(DB中)级联

1 / 31
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功