`
zhang19841017
  • 浏览: 78962 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

参考:Hibernate reference:http://docs.huihoo.com/fram

阅读更多


假设有两个表,Photos(一) --- picture(多)Photo包含picture集合

HQL代码 > fetch(配置) > lazy (配置)
默认 lazy="true"
fetch 和 lazy 主要是用来级联查询的,而 cascade 和 inverse 主要是用来级联插入和修改的

 

fetch参数指定了关联对象抓取的方式是select查询还是join查询,select方式时先查询返回要查询的主体对象(列表),再根据关联外键 id,每一个对象发一个select查询,获取关联的对象,形成n+1次查 询; 而join方式,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。
如果你的关联对象是延迟加载的,它当然不会去查 询关联对象。 另外,在hql查询中配置文件中设置的join方式是不起作用的(而在所有其他查询方式如get、criteria或再关联获取等等都是有效的),会使用 select方式,除非你在hql中指定join fetch某个关联对象。fetch策略用于定义 get/load一个对象时,如何获取非lazy的对象/集合。 这些参数在Query中无效。

在某种特殊的场合下,fetch在hql中还是起作用的。
例如
现有message(回帖)-->topic(主贴)-->forum(版块) 的多级many-to-one结构:
第一级:message-->topic many-to-one配置lazy="false" fetch="join"
第二级:topic-->forum many-to-one配置lazy="false" fetch="join"
这时如果"from message",则第二级:topic-->forum中的fetch策略会起作用

查询抓取(默认的)在N+1查询的情况下是极其脆弱的,因此我们可能会要求在映射文档中定义使用连接抓取:

<set name="permissions"
fetch="join">
<key column="userId"/>
<one-to-many class="Permission"/>
</set
<many-to-one name="mother" class="Cat" fetch="join"/>
在映射文档中定义的抓取策略将会有产生以下影响:

通过get()或load()方法取得数据。

只有在关联之间进行导航时,才会隐式的取得数据(延迟抓取)。

条件查询

在映射文档中显式的声明 连接抓取做为抓取策略并不会影响到随后的HQL查询。

通 常情况下,我们并不使用映射文档进行抓取策略的定制。更多的是,保持其默认值,然后在特定的事务中, 使用HQL的左连接抓取(left join fetch) 对其进行重载。这将通知 Hibernate在第一次查询中使用外部关联(outer join),直接得到其关联数据。 在条件查询 API中,应该调用 setFetchMode(FetchMode.JOIN)语句。


其实这并不能说明hql能够按照配置文件设置的join进行抓取,这时 第二级:topic-->forum 的抓取其实已经和hql没有关系了,因为前面已经产生了另一个select方式的抓取语句。
而是对象的关联获取,假如查询message时topic是设置为延迟加载的,那么在后面获取message.topic时,如topic.forum不延迟加载,那么topic-->forum会实现配置的join方式的抓取,这个显然和hql查询没有关系。

结论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

分享到:
评论

相关推荐

    Linux资源网站

    具体链接为:[http://docs.huihoo.com/gnu_linux/lfs/blfs-1.0/](http://docs.huihoo.com/gnu_linux/lfs/blfs-1.0/)。 2. **GCC (GNU Compiler Collection)**: 是一套功能强大的编译器集合,支持多种编程语言。...

    Java技术文档常用网址

    - Python Documentation:[http://www.huihoo.com/python/Python-Docs-2.4.2/](http://www.huihoo.com/python/Python-Docs-2.4.2/)(英文) - **Java 家族**: - The Java Tutorial(英文) - Code Conventions ...

    java api 帮助文档 中文 英文 jdk1.6 下载地址

    - Python Documentation:http://www.huihoo.com/python/Python-Docs-2.4.2/(英文) Java家族的其他技术,如Servlet、Java EE和Java ME,也有相应的官方文档: - The Java Tutorial(英文) - Code Conventions ...

    多年来积累的学习网站

    19. **灰狐** (http://www.huihoo.com/):自由、开放、协作、分享的理念,提供开源软件和技术资讯。 20. **Ubuntu中文论坛** (http://forum.ubuntu.org.cn/):Ubuntu操作系统用户的交流平台。 21. **中国IT实验室*...

    Myeclipse优化JBPM4.0配置

    下载地址为[http://download.huihoo.com/jboss/20081215-187.html](http://download.huihoo.com/jboss/20081215-187.html)。 7. **Drools5.0**: 规则引擎,用于实现业务规则的动态管理和执行。下载地址为...

    fvwm简易学习资料

    小王总结的:) 适合fvwm入门的资料 Fvwm is a window manager for X11. It is designed to minimize memory consumption, provide a 3D look to...在线网址http://docs.huihoo.com/homepage/shredderyin/fvwm_frame.html

    FVWM的很牛的配置参照

    关于FVWM的资源: http://pemarchandet.free.fr/fvwm.html ...http://docs.huihoo.com/homepage/shredderyin/fvwm_frame.html

    Java学习网站信息大全

    2. **灰狐动力**(http://www.huihoo.com):专注于开源技术和企业级解决方案,包括Java在内的多种编程语言资源,是开发者获取最新技术动态的好去处。 3. **J道**(http://www.jdon.com):提供Java和J2EE相关的...

    java学习的网站介绍

    灰狐动力网站`http://www.huihoo.com/`虽然不是专门的Java网站,但在J2EE企业应用技术方面具有权威性,是学习中间件技术的好去处。 TheServerSide`http://www.theserverside.com/home/`(英文)是一个专业的Java...

    给IT人的好网址

    20. **HuiHoo文档中心** (http://docs.huihoo.com/) - **功能简介**:提供各种编程语言和技术的官方文档。 - **应用场景**:查找官方文档、学习新技术。 21. **Vsharing** (http://www.vsharing.com/) - **功能...

    IT社区几个比较好的

    6. HUIHOO 论坛(http://www.huihoo.com/forum/):面向中间件开发者。该社区特色在于它提供了大量的中间件类文章和讨论,涵盖开源、中间件、工作流等方面的内容。 7. JAVA 世界(http://bbs.chinajavaworld.com/)...

    ava学习网址.doc

    4. **www.huihoo.com** - 灰狐动力站点,除了Java相关内容,还专注于企业级应用的分享。 5. **www.matrix.org.cn** - Matrix技术网,拥有大量的Java文章和资源,尽管论坛人气可能稍弱,但专家众多。 6. **...

    java相关资源网址

    9. **HuiHoo** - &lt;http://www.huihoo.com/&gt; - **知识点**: HuiHoo是一个专注于Java技术的网站,提供J2EE相关的信息和服务。 - **价值**: 对于学习J2EE的企业级开发人员来说非常有帮助。 10. **The Server Side** ...

    j2ee站点资源---好东西

    5. **Huihoo** (http://www.huihoo.com):专注于中间件技术的站点,推出了J2EE服务器产品JFox及其他开源产品。这里可以学习到关于J2EE服务器实现的实践经验。 6. **SUN GCE Club** (http://gceclub.sun.com.cn):...

    Android交叉编译htop及使用方法

    而Android 5.0版本的NDK下载地址则位于:[http://docs.huihoo.com/android/5.0/tools/sdk/ndk/index.html](http://docs.huihoo.com/android/5.0/tools/sdk/ndk/index.html)。 ##### 3.2 解压缩并安装交叉编译工具 ...

    java知识学习网站

    HuiHoo - http://www.huihoo.com/ HuiHoo是一个专注于Java技术的专业网站,特别是在J2EE企业级应用方面有着丰富的资源。该网站不仅有技术文章和教程,还有论坛供开发者交流经验和解决问题。对于想要深入了解Java...

    国内外Java学习论坛汇总.doc

    4. **灰狐动力 (www.huihoo.com)** - **特点**:拥有JFox平台,聚焦企业级应用。 - **推荐理由**:适合对企业级Java应用感兴趣的技术人员。 5. **Matrix技术 (www.matrix.org.cn)** - **特点**:Java文章和资源...

    java各类学习网站及论坛

    - **网址**: &lt;http://www.huihoo.com/&gt; - **特点**: HuiHoo 是一个致力于推广开源软件和技术的组织,尤其是Java相关的项目和技术。 - **推荐理由**: HuiHoo 提供了大量的开源项目资源和技术文档,是寻找开源项目和...

    qtwinmigrate

    mfc中使用qt,包含qmfcapp.h qwinhost.h qwinwidget.h文件,以及examples 可结合http://docs.huihoo.com/qt/solutions/4/qtwinmigrate/index.html学习使用 编译环境:vs2013+qt 5.7.0,编译前请阅读readme.txt,...

Global site tag (gtag.js) - Google Analytics