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.对象和表记录的转换 ...
随机推荐
- 翻译二--创建一个Web测试计划
这里主要是翻译jmeter官方文档第4章:创建一个基本的测试计划来测试一个网站.你将创建5个用户来发送请求给两个页面,同时,你将告诉用户去执行两次测试.所以,请求的总和是5(users)*2(requ ...
- 利用css3给座右铭设置漂亮的渐变色
.footer-container .footer-content p .motto { font-weight: bolder; -webkit-background-clip: text; -we ...
- GridView固定行宽,自动换行,鼠标放在Table的Tr上变色
//固定行宽table-layout:fixed;//自动换行word-break :break-all;word-wrap:break-wordGridView.Attributes.Add(&qu ...
- Django之组件--auth组件
目录 Auth模块是什么 auth模块常用方法 扩展默认的auth_user表 1 Django自带的用户认证模块,可以快速的实现登录,注销,修改密码... 2 扩展auth表,需要继承Abstrac ...
- ssh框架里拦截器的权限验证基本思路【转】
相关表 序号 表性质 表名 字段 字段 字段 字段 字段 1 基表 用户表 id 帐号 密码 2 基表 角色表 id 角色名 3 基表 权限表 id 权限名 请求路径 4 ...
- JS常用类
JS常用类 一.Number 1.常用数字 整数:10 小数:3.14 科学计数法:1e5 | 1e-5 正负无穷:Infinity | -Infinity 2.常用进制 二进制:0b1010 八进制 ...
- [Android] Android 异步定时任务实现的三种方法(以SeekBar的进度自动实现为例)
[Android] Android 定时异步任务实现的三种方法(以SeekBar的进度自动实现为例) 一.采用Handler与线程的sleep(long)方法 二.采用Handler与timer及Ti ...
- Impala系列:Impala查询优化
==========================理解 mem_limit 参数==========================set mem_limit=-1b #取消内存限制set mem_ ...
- GBK 字符集
什么是 GBK ? 中文名 汉字编码字符集 外文名 Chinese Internal Code Specification 全 称 <汉字内码扩展规范> GBK编码,是对GB2312 ...
- 数据结构Java实现01----线性表与顺序表
一.线性结构: 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素: (2)第一个数据元素没有前驱数据元素: (3)最后一个数据元素没有 ...