`
zhang19841017
  • 浏览: 77905 次
  • 性别: 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

分享到:
评论

相关推荐

    Java学习从入门到精通[原创]

    5、http://www.huihoo.com/ 灰狐动力网站,一个专业的中间件网站,虽然不是专业的Java网站,但是在J2EE企业应用技术方面有深厚的造诣。 6、http://www.theserverside.com/home/(英文) TheServerSide是一个著名的专门...

    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

    jacob 操作office

    大家先要了解一下jacob ,官方的解释是Java COM Bridge,即java和com组件间的桥梁(进一步了解com/dcom: http://docs.huihoo.com/com/)com一般表现为dll或exe等二进制文件,像我们呆会会用到的jacob.dll文件这里...

    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,...

    JACOB jar 下载 ,方便java 操作office 软件

    Java COM Bridge,即java和com组件间的桥梁(进一步了解com/dcom: http://docs.huihoo.com/com/) com一般表现为dll或exe等二进制文件,像我们呆会会用到的jacob.dll文件这里说说为什么我们用java去操纵office(如:...

    Huihoo Enterprise Open Source Solution-开源

    huihoo.org - 企业开源 - 开放企业基金会 (OEF) :: JFox - http://sourceforge.net/projects/jfox :: Orbas - http://sourceforge.net/projects/orbas :: Link3 - http: //sourceforge.net/projects/link3 :: and ::...

    huihoo-willow-1.1

    免费工作流免费工作流

    J2EE学习笔记

    By huihoo.com顾志凌(rockygu@citiz.net),Doc文档。内容包括JSP基础知识、XML、WebService、优化EJB、JTA/JTS、JDBC和JCA关系、Weblogic等等等等。

    JFox - J2EE Application Server-开源

    JFox 是一个开源的、符合标准的、基于 J2EE 的应用服务器,使用 100% 纯 Java 实现,它来自中国企业开源社区。 (www.huihoo.org)

Global site tag (gtag.js) - Google Analytics