Hibernate最让人头大的就是对集合的加载形式。
书看了N次了,还是没有真正理解Hibernate。所以下午专门做了下测试,对配置文件的意思加深了认识。
假设有两个表,Photos(一)
--- picture(多)Photo包含picture集合
结论1: HQL代码 > fetch(配置) > lazy
(配置)
结论2: 默认 lazy="true"
结论3: fetch 和 lazy 主要是用来级联查询的, 而 cascade 和
inverse 主要是用来级联插入和修改的
结论4: 如果你是用spring来帮你管理你的session,
并且是自动提交,延迟加载就等于没加载~_~(当然
除非你手动重新打开session然后手动Hibernate.initialize(set);然后关闭session.
结论5: cascade主要是简化了在代码中的级联更新和删除。
j结论6:老爸可以有多个孩子,一个孩子不能有多个老爸,而且老爸说的算,
孩子围着老爸转。
所以Photos老爸要有权力所以
cascade 这个关键子都是送给老爸的, 也就是级联更新,
老爸改姓了,儿子也得跟着改,呵呵。“不然,就没有零花钱咯”。
而Picture儿子整体挨骂,但是还是要维护父子之间良好的关系,对老爸百依百顺,所
以老爸就说,儿子,“关系,由你来维护(inverse="true") ,不然就不给零花钱。呵。”。
<set
name="pictures" inverse="true" cascade="all">
<key>
<column name="photosid" not-null="true"
/>
</key>
<one-to-many
class="girl.domain.Picture" />
</set>
测试代码:
Photos p =
ps.getById(1);
Set<Picture> set = p.getPictures();
for(Picture
pic : set){
System.out.println(pic.getId());
}
配置文件的一部分:
<set name="pictures" inverse="true" cascade="all"
>
<key>
<column name="photosid"
not-null="true" />
</key>
<one-to-many
class="girl.domain.Picture" />
</set>
测试过程会对配置文件不断修改:并且从来不曾手动重新打开session
测试结构:
当配置条件为
lazy=true 一句查询 测试代码中没有调用getPicture() 正常
Hibernate: select photos0_.id as
id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as typeid0_0_,
photos0_.name as name0_0_, photos0_.createtime as createtime0_0_,
photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_,
photos0_.uri as uri0_0_ from super.photos photos0_ where
photos0_.id=?
lazy=true 一句查询 有getPicture()
Hibernate: select photos0_.id as
id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as typeid0_0_,
photos0_.name as name0_0_, photos0_.createtime as createtime0_0_,
photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_,
photos0_.uri as uri0_0_ from super.photos photos0_ where
photos0_.id=?
lazy=true 一句查询 有getPicture() 并且访问了里面的元数Picture
且有异常抛出
Hibernate: select photos0_.id as id0_0_, photos0_.userid as
userid0_0_, photos0_.typeid as typeid0_0_, photos0_.name as name0_0_,
photos0_.createtime as createtime0_0_, photos0_.description as descript6_0_0_,
photos0_.faceid as faceid0_0_, photos0_.uri as uri0_0_ from super.photos
photos0_ where photos0_.id=?
lazy="false" 两句查询 肯定没问题,因为全部数据都个查了出来
所以怎么调用都正常
Hibernate: select photos0_.id as id0_0_, photos0_.userid as
userid0_0_, photos0_.typeid as typeid0_0_, photos0_.name as name0_0_,
photos0_.createtime as createtime0_0_, photos0_.description as descript6_0_0_,
photos0_.faceid as faceid0_0_, photos0_.uri as uri0_0_ from super.photos
photos0_ where photos0_.id=?
Hibernate: select pictures0_.photosid as
photosid1_, pictures0_.id as id1_, pictures0_.id as id2_0_, pictures0_.photosid
as photosid2_0_, pictures0_.name as name2_0_, pictures0_.clicked as clicked2_0_,
pictures0_.uploaddate as uploaddate2_0_, pictures0_.size as size2_0_,
pictures0_.description as descript7_2_0_, pictures0_.uri as uri2_0_ from
super.picture pictures0_ where pictures0_.photosid=?
fetch="join" 一句查询 效果 == lazy="false"
呵呵,哪个效率高,我就不知道了。。。。。。。。。。。
Hibernate: select photos0_.id as id0_1_,
photos0_.userid as userid0_1_, photos0_.typeid as typeid0_1_, photos0_.name as
name0_1_, photos0_.createtime as createtime0_1_, photos0_.description as
descript6_0_1_, photos0_.faceid as faceid0_1_, photos0_.uri as uri0_1_,
pictures1_.photosid as photosid3_, pictures1_.id as id3_, pictures1_.id as
id2_0_, pictures1_.photosid as photosid2_0_, pictures1_.name as name2_0_,
pictures1_.clicked as clicked2_0_, pictures1_.uploaddate as uploaddate2_0_,
pictures1_.size as size2_0_, pictures1_.description as descript7_2_0_,
pictures1_.uri as uri2_0_ from super.photos photos0_ left outer join
super.picture pictures1_ on photos0_.id=pictures1_.photosid where
photos0_.id=?
不加fetch="join" 一句查询 没有getPicture() 正常
Hibernate: select
photos0_.id as id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as
typeid0_0_, photos0_.name as name0_0_, photos0_.createtime as createtime0_0_,
photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_,
photos0_.uri as uri0_0_ from super.photos photos0_ where
photos0_.id=?
不加fetch="join" 一句查询 有getPicture() 正常
Hibernate: select
photos0_.id as id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as
typeid0_0_, photos0_.name as name0_0_, photos0_.createtime as createtime0_0_,
photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_,
photos0_.uri as uri0_0_ from super.photos photos0_ where
photos0_.id=?
不加fetch="join" 一句查询 有getPicture() 并且访问里面的元素Picture的ID
有异常抛出
Hibernate: select photos0_.id as id0_0_, photos0_.userid as userid0_0_,
photos0_.typeid as typeid0_0_, photos0_.name as name0_0_, photos0_.createtime as
createtime0_0_, photos0_.description as descript6_0_0_, photos0_.faceid as
faceid0_0_, photos0_.uri as uri0_0_ from super.photos photos0_ where
photos0_.id=?
来个两兵交战 fetch="join" lazy="true" 呵呵 结果,一句查询, 结构正常 所以就当lazy不存在好了。
看来fetch 是老大。、、、、、、、、、、、、、
Hibernate: select photos0_.id as id0_1_,
photos0_.userid as userid0_1_, photos0_.typeid as typeid0_1_, photos0_.name as
name0_1_, photos0_.createtime as createtime0_1_, photos0_.description as
descript6_0_1_, photos0_.faceid as faceid0_1_, photos0_.uri as uri0_1_,
pictures1_.photosid as photosid3_, pictures1_.id as id3_, pictures1_.id as
id2_0_, pictures1_.photosid as photosid2_0_, pictures1_.name as name2_0_,
pictures1_.clicked as clicked2_0_, pictures1_.uploaddate as uploaddate2_0_,
pictures1_.size as size2_0_, pictures1_.description as descript7_2_0_,
pictures1_.uri as uri2_0_ from super.photos photos0_ left outer join
super.picture pictures1_ on photos0_.id=pictures1_.photosid where
photos0_.id=?
相关推荐
Inverse Synthetic Aperture Radar Imaging----Victor C. Chen 第一章 ISAR成像介绍 第二章 ISAR成像基本原理 第三章 ISAR成像 第四章 ISAR运动补偿 第五章 ISAR自聚焦方法 第六章 ISAR成像中的信号处理问题 第七章...
This textbook evolved from a course in geophysical inverse methods taught during the past two decades at New Mexico Tech, first by Rick Aster and, subsequently, jointly between Rick Aster and Brian ...
NHibernate Inverse & Cascade
Inverse Problem Theory and Methods for Model Parameter Estimation - A. Tarantola(牛叉)
Hibernate中Cascade和inverse的区别,讲解的很详细
参数估计和反问题:《Parameter estimation and inverse problems》
Inverse heat conduction ill-posed problems
首先,以视频会议系统应用为背景,简单介绍了DCT和IDCT(反向离散余弦变换,Inverse-DCT)算法、公式及其相关;其次,以VC++为工具,以个人笔记本电脑为平台,实现了DCT和IDCT算法,给出并且分析了部分用程序代码,做...
彻底明白Hibernate中的Inverse
Hibernate中cascade与inverse属性详解
hibernate inverse和cascade的详细讲解,相当详细全面的对inverse和cascade区别和用法的讲解
Inverse Synthetic Aperture Radar Simulation and Processing Tool If you have the M-code, please share it, many people will thank you!
Inverse Scattering Theory 经典教材
JavaEE学习笔记之Hibernate表关系之一对多(inverse详解)
IND Inverse Indicator.
COMPUTATIONAL METHODS FOR INVERSE PROBLEMS,反问题的计算方法,国外艾斯维尔出版的关于反问题求解的重要书籍,JPG版本
Inverse Multiplexing for ATM (IMA) Specification Version 1.1
The feasibility of an inverse geometry CT system
matlab开发-Pseudoinverse。矩阵因式分解用于伪逆计算