一对多的双向
一对多指的是类与集合之间的关系
多对一指的是类与类之间的关系
在保存学生的时候,级联保存班级
在更新学生的时候,保存班级
已经存在一个班级,已经存在一个学生,让该学生加入到该班级
解除一个班级和所有的学生之间的关系
总结
1、一般情况下,一对多,多的一方维护关系,效率比较高
2、一对多,如果一的一方维护关系,实际上就是发出更新外键的update语句
3、如果多的一方维护关系,实际上就是更新了student表的所有的字段
4、一般情况下,Classes.hbm.xml文件中,针对set集合的invserse的值为true
不维护关系
多对多双向
说明:
1、关系操作
增加关系相当于在第三张表中插入一行数据
解除关系相当于在第三张表中删除一行数据
更新关系?
先删除后增加
谁维护关系,效率都一样,看页面的需求
2、级联操作
保存课程的时候级联保存学生,并且维护关系
在更新课程的时候,级联更新学生
解除课程1和所有的学生之间的关系
把学生1从课程1转到课程2
删除一个学生
总结
1、多对多的结构是三张表
2、映射文件中
3、多对多,谁维护关系,效率都一样
4、多对多是类与集合的关系
作业
用户(咨询员表和学生表:多对多的关系)
角色
权限
用户与角色是多对多的关系
权限与角色是多对多的关系
用户:咨询员1、咨询员2、咨询员3、学员1,咨询员4(咨询主管)
角色:咨询员、咨询员主管、学员
权限:审批自荐信、审批基础测试、审批入学测试、审批面试、分配名额
自荐信的申请、基础测试的申请、入学测试的申请、面试申请
建立用户与角色之间的关系
建立角色与权限之间的关系
查询:
1、某一个学生拥有多少权限,并且把权限的明细写出来
2、一个咨询员拥有多少权限
3、一个咨询员有多少个学生,再查询该学生的权限
要做的事情:
1、建立持久化和映射文件
2、生成表
3、写客户端,把基本的数据填充完毕
4、把关系填充完
5、实现功能
一对一
二级缓存
数据特点
1、公共的数据
2、不经常修改的数据
3、私密性不是很高的数据
结构
二级缓存的生命周期
当hibernate程序开始的时候,二级缓存就存在了,当hibernate容器销毁的时候,
二级缓存就销毁了。
hibernate内部没有提供二级缓存的实现
默认情况下,利用的是ehcache。
步骤
步骤1
在hibernate的配置文件中开启二级缓存
步骤2
在hibernate的配置文件中提供二级缓存的供应商
步骤3
开启类级别的二级缓存
第一种方案:
第二种方案
在Classes.hbm.xml文件中
类级别的操作
get
save
不能操作二级缓存中
update
也不能操作二级缓存
list
集合类别的操作
二级缓存的数据缓存到磁盘上
编译一个ehcache.xml文件
<diskStore path="e:\\TEMP1"/> 在磁盘上的存储路径
<defaultCache
maxElementsInMemory="12" 在内存中最大可以存储多少对象
eternal="false"
timeToIdleSeconds="1200"
timeToLiveSeconds="1200"
overflowToDisk="false" 如果内存中超过了最大的对象数,是否存储到磁盘上
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
<Cache
name="com.itheima10.hibernate.domain.Classes"
maxElementsInMemory="3"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
二级缓存的缓存策略
上面的代码会报错