hibernate框架学习第四天:关联关系、外键、级联等
一对多关联关系
表
	  一方
	  多方(外键)
实体类
	  一方:TeacherModel
		    添加多方的集合Set
	  多方StudentModel
		    添加一方的对象
一方配置关系
	  name:一方模型中描述多方的集合对象名
	  column:多方数据库表中的外键名称
	  class:多方模型类名
	  <set name="students">			
		    <key column="teacherUuid"></key>
  	    <one-to-many class="cn.itcast.h3.one2many.vo.StudentModel"/>
    </set>
多方配置关系
	  name:多方模型中描述一方的对象名
	  class:一方模型类名
	  column:多方数据库表中的外键名称
	  <many-to-one 
		    name="teacher"
		    class="cn.itcast.h3.one2many.vo.TeacherModel"
		    column="teacherUuid"
		  />
关系维护
	添加数据
		  1.一方数据与多方数据同时添加
			    必须建立一方与多方之间的关联关系
			    依靠对象建立对象间的关系
			    //多方对一方的关联
			    sm1.setTeacher(tm);
			    sm2.setTeacher(tm);
			    //一方对多方的关联
			    tm.getStudents().add(sm1);
			    tm.getStudents().add(sm2);
		2.单独添加
			    单独添加时不需要进行关系设定
			    可以进行添加,注意字段为null的设定
	  添加数据时的问题
		  1.在添加数据时候,PO对象不能关联TO对象,此时要抛出PO不能关联TO的异常
			  解决方案:级联添加
			  步骤:为添加方配置级联添加关系
			  cascade = save-update
			  说明:无论是一对还是多对均可以配置级联添加,但是只规定从当前方可以发起级联操作
删除数据
		1.保留一方数据,删除多方数据
			基本操作
		2.删除一方数据,同时删除对应的多方数据(级联删除)
			步骤:为一方数据添加级联删除特性
			cascade = delete
		3.如果多方断开了与一方的关联,此时多方数据不需要保留,对其进行删除(孤子删除)
			步骤:断开一与多的关系
			cascade = delete-orphan
重要:cascade属性不仅维护级联对象,而且还维护级联关系
关系维护 inverse
		在一对多的关联关系中,通常使用多方数据来进行关系维护,而一方不需要具有关系维护的能力
		为不具有关系维护能力的一方设置inverse = "true" 可以让当前设置方丧失关系维护权
重要:inverse属性维护关联关系
------------------------------------------------
多对多关系
表
左方:正常(无外键)
右方:正常(无外键)
关系表:双方外键
模型
全部都要加对方的集合Set
hbm.xml配置
双方配置完全相同
		<set 
			name="students" 	当前模型的集合对象名
			table="tbl_relation"	关系表名
			>
        	<key column="teacherUuid"/>	当前模型在关系表中的外键
        	<many-to-many		配置关系
        		class="cn.itcast.h3.many2many.vo.StudentModel"	关联关系对方对象的模型类名
        		column="studentUuid"		关联关系对方对象在关系表中的外键
        		/>
    </set>
操作:
	单独添加
		基本H3操作
	同时添加
		绑定关系后,双方都进行关系维护,此时会添加对关系进行两次维护
		解决方案:规定一方为从方,使其失去关系维护权,inverse = "true"
	添加关联关系
		将主从双方没有关联关系的对象,互相添加关联关系
		tm.getStudents().add(sm);
		sm.getTeachers().add(tm);
	删除关联关系
		同添加关联关系
		sm.getTeachers().remove(tm);
		tm.getStudents().remove(sm);
	变更关联关系
		先断开之前的关系	DELETE
		//先解除关系
			tm1.getStudents().remove(sm);
			sm.getTeachers().remove(tm1);
		然后添加新的关系	INSERT
		//再添加关系
			tm2.getStudents().add(sm);
			sm.getTeachers().add(tm2);
	删除数据
			单独删除
			级联删除(不建议)	
-----------------------
一对一关联关系
外键配置方式
	表
		主方:正常
		从方:添加外键约束
	模型
		添加对应模型对象
	配置关系
		主方:
			<one-to-one 
        	name="wife"		主方关联关系对象名
        	class="cn.itcast.h3.one2one.vo.WifeModel"	从方模型类名
        	property-ref="husband"  从方关联关系对象名
        	/>
		从方:
			<many-to-one 
        	name="husband"	从方关联关系对象名
        	class="cn.itcast.h3.one2one.vo.HusbandModel" 主方模型类名
        	column="husbandUuid"   外键字段名
        	unique="true"		设定唯一性
        	/>
主外键配置方式   
	表
		主方:正常
		从方:不添加外键,主键不能做自增
	模型
		添加对应模型对象    	
  配置关系
		主方:
			<one-to-one 
        	name="wife"
        	class="cn.itcast.h3.one2one.vo.WifeModel"
        	/>
		从方:
			主键约束方式发生改变
			 <id name="uuid">
        	<generator class="foreign">		生成策略改为外部提供
        		<param name="property">husband</param>	设置生成策略由属性提供property
        																						属性提供的属性名为husband
        	</generator>
        </id>
        <one-to-one 
        	name="husband"
        	class="cn.itcast.h3.one2one.vo.HusbandModel"
        	constrained="true"	约束为为主键约束
        	/>     
2种配置完成,操作功能完全一样
操作
	单独添加
		主方:
		从方:从方必须依赖于主方的关联关系才可以添加
	同增
		直接绑定关系就可以进行
	级联删除
		读取主方数据,然后配置级联删除操作cascade = delete
-------------------------------------------------------------
总结:
对象的状态
	TO
	PO
	DO
	区别
	转换
一级缓存
	实质
	多个,不是唯一的
	一级缓存的操作
	存在性
关联关系
	一对一
	一对多
	多对多
表的制作:
模型制作:
配置:
cascade:规定了级联操作的种类,【同时维护关系】基于inverse=false
inverse:规定了是否维护关系
关联关系中对象的操作是通过 add remove set 操作
hibernate框架学习第四天:关联关系、外键、级联等的更多相关文章
- Hibernate框架的第四天
		
## Hibernate框架的第四天 ## ---------- **回顾:Hibernate框架的第三天** 1. 一对多关联关系映射 * JavaBean的编写 * 编写映射的配置文件 * 使用级 ...
 - 4.VUE前端框架学习记录四:Vue组件化编码2
		
VUE前端框架学习记录四:Vue组件化编码2文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...
 - Sqlite 设置外键级联更新
		
Sqlite 设置外键级联更新 选择好外键表和列以后,勾选更新事件,更新方式设置为CASCADE,即可在外键更新时自动更新
 - [ SSH框架 ] Hibernate框架学习之三
		
一.表关系的分析 Hibernate框架实现了ORM的思想,将关系数据库中表的数据映射成对象,使开发人员把对数据库的操作转化为对对象的操作,Hibernate的关联关系映射主要包括多表的映射配置.数据 ...
 - Hibernate框架学习之注解映射实体类
		
前面的相关文章中,我们已经介绍了使用XML配置文件映射实体类及其各种类型的属性的相关知识.然而不论是时代的潮流还是臃肿繁杂的配置代码告诉我们,注解配置才是更人性化的设计,于是学习了基本的映射 ...
 - Hibernate框架学习之注解配置关系映射
		
上篇文章我们通过注解对映射了单个实体类,但是具体项目中往往实体类之间又是相互关联的,本篇文章就是从实体类之间存在的不同关联角度,具体学习下如何映射他们之间的关联,主要涉及内容如下: 单向的一 ...
 - [ SSH框架 ] Hibernate框架学习之二
		
一.Hibernate持久化类的编写规范 1.什么是持久化类 Hibernate是持久层的ORM影射框架,专注于数据的持久化工作.所谓持久化,就是将内存中的数据永久存储到关系型数据库中.那么知道了什么 ...
 - [ SSH框架 ] Hibernate框架学习之四(JPA)
		
一.JPA概述以及它和Hibernate之间的关系 1.1.Hibernate 概述 JPA Java Persistence API,是EJB3规范中负责对象持久化的应用程序编程接口(ORM接口), ...
 - j2ee开发之hibernate框架学习笔记
		
hibernate框架技术重点学习笔记 1.针对不同的数据库,有不同的数据库实现类,使其符号对应的数据库? mysqlDaoImpl oracleDaoImpl ... ... 2.对象和表记录的转换 ...
 
随机推荐
- 设计模式---行为变化模式之访问器模式(Visitor)
			
一:概念 访问者模式,是行为模式之一,它分离对象的数据和行为,使用Visitor模式,可以不修改已有类的情况下,增加新的操作角色和职责. 二:动机 在软件构建的过程中,由于需求的改变,某些类层次结构中 ...
 - [JUC-4]ThreadPoolExecutor源码分析
			
相关博文: https://segmentfault.com/a/1190000008693801 https://www.jianshu.com/p/fa1eac9710c8 //构造器1 publ ...
 - Maven 本地仓库,远程仓库,中央仓库,Nexus私服,镜像 详解
			
一. 本地仓库 本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库.这样在你下次使用的时候就不需要从远程下 ...
 - 阿里Fastjson的使用
			
Fastjson是一个Java语言编写的高性能功能完善的JSON库.由阿里巴巴公司团队开发的. 主要特性主要体现在以下几个方面: 1.高性能 fastjson采用独创的算法,将parse的速度提升到极 ...
 - springBoot中实现自定义属性配置、实现异步调用、多环境配置
			
springBoot中其他相关: 1:springBoot中自定义参数: 1-1.自定义属性配置: 在application.properties中除了可以修改默认配置,我们还可以在这配置自定义的属性 ...
 - 前端基础之JQuery - day15
			
写在前面 上课第15天,打卡: 张国臂掖,以通西域: ########### # 课上简书 # ########## http://jquery.cuishifeng.cn/index.html JQ ...
 - Sliverlight常见错误集锦
			
1. 使用GridSplitter时候(参考),出现如下错误 C# 中的错误Error 2 The type 'sp:GridSplitter' was not found. Verify…… 对程序 ...
 - 26. SpringBoot 初识缓存及 SimpleCacheConfiguration源码解析
			
1.引入一下starter: web.cache.Mybatis.MySQL @MapperScan("com.everjiankang.cache.dao") @SpringBo ...
 - call apply bind 区别?
			
call apply bind 区别? 例:定义一个计算器,没绑定bind的为公共计算器,call可以调用,绑定bind的为私人计算器,别人调用不了, //ps:用bind绑定的call强制作借用不好 ...
 - 第25月第9天 tf_tang_poems  kaggle
			
1.neural-style https://github.com/anishathalye/neural-style wget http://www.vlfeat.org/matconvnet/mo ...