<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 165, comments - 198, trackbacks - 0, articles - 1
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    一篇非常好的 Hibernate? 文章
    出自: http://guxing.blog.enorth.com.cn/article/174717.shtml

    Tags: fetch
    Hibernate最讓人頭大的就是對(duì)集合的加載形式。

    書(shū)看了N次了,還是沒(méi)有真正理解Hibernate。所以下午專門(mén)做了下測(cè)試,對(duì)配置文件的意思加深了認(rèn)識(shí)。

    假設(shè)有兩個(gè)表,Photos(一)? ---? picture(多)Photo包含picture集合

    結(jié)論1: HQL代碼 > fetch(配置) > lazy (配置)
    結(jié)論2: 默認(rèn) lazy="true"
    結(jié)論3: fetch 和 lazy 主要是用來(lái)級(jí)聯(lián)查詢的,?? 而 cascade 和 inverse 主要是用來(lái)級(jí)聯(lián)插入和修改的
    結(jié)論4: 如果你是用spring來(lái)幫你管理你的session, 并且是自動(dòng)提交,延遲加載就等于沒(méi)加載~_~(當(dāng)然除非你手動(dòng)重新打開(kāi)session然后手動(dòng)Hibernate.initialize(set);然后關(guān)閉session.
    結(jié)論5:? cascade主要是簡(jiǎn)化了在代碼中的級(jí)聯(lián)更新和刪除。
    j結(jié)論6:老爸可以有多個(gè)孩子,一個(gè)孩子不能有多個(gè)老爸,而且老爸說(shuō)的算, 孩子圍著老爸轉(zhuǎn)。所以Photos老爸要有權(quán)力所以 cascade?這個(gè)關(guān)鍵子都是送給老爸的,?也就是級(jí)聯(lián)更新,老爸改姓了,兒子也得跟著改,呵呵?!安蝗?,就沒(méi)有零花錢(qián)咯”。而Picture兒子整體挨罵,但是還是要維護(hù)父子之間良好的關(guān)系,對(duì)老爸百依百順,所以老爸就說(shuō),兒子,“關(guān)系,由你來(lái)維護(hù)(inverse="true")?,不然就不給零花錢(qián)。呵?!薄?br />?????????????? <set name="pictures" inverse="true" cascade="all">
    ??????????????????? <key>
    ?????????????????????? <column name="photosid" not-null="true" />
    ??????????????????? </key>
    ???????????????? <one-to-many class="girl.domain.Picture" />
    ???????? ??? </set>

    ???????????????
    測(cè)試代碼:

    ???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>


    測(cè)試過(guò)程會(huì)對(duì)配置文件不斷修改:并且從來(lái)不曾手動(dòng)重新打開(kāi)session

    測(cè)試結(jié)構(gòu):

    當(dāng)配置條件為 lazy=true一句查詢 測(cè)試代碼中沒(méi)有調(diào)用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 一句查詢 有g(shù)etPicture()
    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
    一句查詢? 有g(shù)etPicture() 并且訪問(wèn)了里面的元數(shù)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" 兩句查詢? 肯定沒(méi)問(wèn)題,因?yàn)槿繑?shù)據(jù)都個(gè)查了出來(lái) 所以怎么調(diào)用都正常
    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" 呵呵,哪個(gè)效率高,我就不知道了。。。。。。。。。。。
    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"一句查詢? 沒(méi)有g(shù)etPicture() 正常
    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" 一句查詢? 有g(shù)etPicture() 正常
    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"一句查詢 有g(shù)etPicture() 并且訪問(wèn)里面的元素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=?

    來(lái)個(gè)兩兵交戰(zhàn) fetch="join" lazy="true"? 呵呵 結(jié)果,一句查詢, 結(jié)構(gòu)正常 所以就當(dāng)lazy不存在好了。 看來(lái)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=?



    主站蜘蛛池模板: 中文字幕av无码不卡免费| 亚洲综合婷婷久久| 国产成人精品久久亚洲高清不卡| 久久免费福利视频| 中文字幕人成人乱码亚洲电影| 无码天堂va亚洲va在线va| 国产免费观看青青草原网站| 亚洲AV永久无码天堂影院 | 青青草原精品国产亚洲av| 国产色无码精品视频免费| 国产亚洲一区二区手机在线观看 | 无码国产精品一区二区免费式芒果 | 亚洲激情黄色小说| h视频在线免费看| 波多野结衣亚洲一级| 成年女人免费碰碰视频| 自拍偷自拍亚洲精品播放| 亚洲精品国产综合久久一线| 国产成人无码精品久久久久免费 | 91香焦国产线观看看免费| 亚洲激情视频网站| 日本高清免费网站| 一本久久A久久免费精品不卡| 猫咪社区免费资源在线观看| 亚洲AV无码一区二区三区电影| 免费无遮挡无码永久在线观看视频| 成人一级免费视频| 久久久亚洲精品国产| 国产电影午夜成年免费视频| 亚洲av乱码一区二区三区按摩| 国产亚洲美女精品久久久2020| 最近中文字幕高清免费中文字幕mv| 亚洲国产综合精品中文第一| 亚洲国产婷婷综合在线精品| 久久99热精品免费观看牛牛| 亚洲精品又粗又大又爽A片| 国产成人精品曰本亚洲79ren| 100部毛片免费全部播放完整| 自拍日韩亚洲一区在线| 亚洲日本中文字幕一区二区三区 | 国产免费av一区二区三区|