Hibernate
Hibernate
Hibernate
Hibernate
知识点小记
一、 cascade
cascade 属性是设置级联操作的也就是在操作一端的数据如果影响到多端数据时
会进行级联操作,一对一的时候直接写在标签上,其他的要写在 set 标签上
cascade="none|save-update|all|all-delete-orphan"
none 就是不使用级联操作,默认级联是 none 。
save-update 也就是只有对象保存操作(持久化操作)或者是持久化对象的更新
操作,才会级联操作关联对象(子对象) 。
all
对持久化对象的所有操作都会级联操作关联对象(子对象) 。
all-delete-orphan ,在多端进行删除操作时,会再多端表中留下 null 空纪录,设 置
了级联操作为 delete 之会将表中表示关联的外键 id 置成 null , 不会将这条纪录 也
删除掉, 而把级联设置成 delete-orphan 就不会留有空纪录, 而是级联的把相关 纪
录删除掉。
二、 inverse
inverse="true" 就是在设置如果在内存中的修改或添加了这个集合中的某一个或
某几个对象他不会将全部集合的信息同步到数据库, 而是只将集合中被修改的 对
象重新同步到数据库
三、 lazy
lazy= “ true ”
延迟加载,所谓的延迟加载,就是对一端的集合属性的加载策略,就是在不使 用
到集合中的对象的数据就不会真正的加载集合中的对象数据, 而是家在一个代 理
对象就相当于的一个空的容器。
这也就是会出现 LazyInitializationException 异常,也就是没有初始化这个代理 的
集合对象,在事先查询到了集合中的对象就会初始化这个对象,如果 Session 没
有关闭就会在查询加载集合中的对象信息,如果提前关闭了 Session ,当使用集
合中的对象信息时就会有这个异常。
四、 fetch
fetch= “ join ” ,这就是使用了预先抓取策略,也就是针对关联的对象的加载策略,
在使用到关联对象的信息时会再发送 sql 语句, 如果不使用 fetch= “ join ”
,就会
不
使用表连接而是先查出一端的关联 id 再一条一条的发送 sql 语句查询到关联对 象
信息,使用了 fetch= “ join ” 就会使用表连接将关联对象信息直接查寻出来的。
fetch= “ lazy ” 这个是默认的设置。
五、多对多