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

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

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

    隨筆 - 6  文章 - 129  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(14)

    隨筆檔案(6)

    文章分類(467)

    文章檔案(423)

    相冊

    收藏夾(18)

    JAVA

    搜索

    •  

    積分與排名

    • 積分 - 825731
    • 排名 - 49

    最新評論

    閱讀排行榜

    評論排行榜

    假設有一個類A,它有兩個屬性property1和property2,則HQL語句"from A as a left outer join a.property1"有一個原則--HQL語句忽略配置文件的預先抓取策略,這句話有兩個意思:

    1.不管A類對property1在配置文件里是什么策略(可能是預先抓取,立即或延遲檢索,它們都失效),這時都采用HQL指定的左外連接;左外連接必定會初始化property1屬性(或對象),但是如果配置文件里對property1的檢索策略是延遲加載,A類得 到對properyt1的引用,為了得到這個引用,需要再次發送一條SQL語句來確立這種引用關系,這種情況在property1為集合時經常出現.

    2.A類在配置文件中設置的對property2的預先抓取策略將被忽略(不管這個策略是fetch或是select),對property2有影響的設置是立即和延遲加載,hibernate只看得到這兩種策略,所以在使用語句"from A as a left outer join a.property1"時,property2的加載策略將僅由lazy="true"或者是lazy="false"來決定 


    Team.hbm.xml 
    ...    ...
           <set name="students" inverse="true" cascade="all" lazy="true" fetch="join"><!-- 一對多的延遲加載設置 -->
                <key>
                    <column name="TEAMID" length="32" not-null="true" />
                </key>
                <one-to-many class="edu.dgut.ke.model.Student" />
            </set>
    ...    ...
    Student.hbm.xml
    ...    ...
            <many-to-one name="certificate"
             class="edu.dgut.ke.model.Certificate"
             unique="true"
             column="cardId"
             cascade="all"
             lazy="false"
             fetch="join">
            </many-to-one>
            <many-to-one name="team" class="edu.dgut.ke.model.Team" fetch="join">
                <column name="TEAMID" length="32" not-null="true" />
            </many-to-one>
    ...    ...
    測試代碼
      Session session = HibernateSessionFactory.getSession();
      List list = session.createQuery("from Student as s left join s.team").list();
      HibernateSessionFactory.closeSession();
      //list 包括兩個長度為2的數組,每一個數組中包括一個學生對象和一個班級對象
      Object[] stuAndTeam1 = (Object[]) list.get(0);
      Student stu = (Student) stuAndTeam1[0];
      System.out.println(stu.getStudentname());
      System.out.println(stu.getTeam().getTeamname());
      System.out.println(stu.getTeam().getStudents().size());

    控制臺輸出
    Hibernate: select student0_.ID as ID0_0_, team1_.ID as ID2_1_, student0_.cardId as cardId0_0_, student0_.TEAMID as TEAMID0_0_, student0_.STUDENTNAME as STUDENTN4_0_0_, team1_.TEAMNAME as TEAMNAME2_1_ from STUDENT student0_ left outer join TEAM team1_ on student0_.TEAMID=team1_.ID
    Hibernate: select certificat0_.ID as ID1_0_, certificat0_.`DESCRIBE` as DESCRIBE2_1_0_ from CERTIFICATE certificat0_ where certificat0_.ID=?
    Hibernate: select certificat0_.ID as ID1_0_, certificat0_.`DESCRIBE` as DESCRIBE2_1_0_ from CERTIFICATE certificat0_ where certificat0_.ID=?
    張三
    05計算機應用技術(1)班
    Exception in thread "main" org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: edu.dgut.ke.model.Team.students, no session or session was closed
     at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
     at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350)
     at org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:97)
     at org.hibernate.collection.PersistentSet.size(PersistentSet.java:114)
     at edu.dgut.ke.test.chapter3.Query.main(Query.java:44)


    注意:在配置文件中設置的檢索策略只能影響到session.get()或者session.load()方法,對于直接使用
    session.createQuery("from Student as s left join s.team")這種指明HQL的方式,將忽略配置文件的預先抓取檢索策略(學生對班級的預先檢索策略被忽略),這語句指明了學生和班級之間使用左外連接策略,因此控制臺輸出的第一條語句,即使用了左外連接得到了3個對象:2個學生和1個班級。
            得到了學生對象之后,學生以身份證的預先抓取策略失效,所以會有第二條和第三條語句,即使用了立即加載
            得到班級對象后,由于班級對學生采用延遲加載(這個策略不會被忽略),于是班級的學生集合并未得到初始化,所以當輸出學生的人數,就拋出了例外。

    posted on 2007-11-06 15:08 Ke 閱讀(1202) 評論(0)  編輯  收藏 所屬分類: hibernate
    主站蜘蛛池模板: 亚洲日韩在线中文字幕第一页| 亚洲人成网77777亚洲色| 亚洲乱码中文字幕综合| 亚洲成人一级电影| 香蕉97碰碰视频免费| 无码av免费一区二区三区| 全免费a级毛片免费看不卡| 久久99国产亚洲高清观看首页| 亚洲视频无码高清在线| 国产日韩久久免费影院| 最近中文字幕mv免费高清电影| 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲国产专区一区| 亚洲性色高清完整版在线观看| 无码AV动漫精品一区二区免费| 黄在线观看www免费看| 成人午夜亚洲精品无码网站| 欧洲 亚洲 国产图片综合| 97在线视频免费公开视频| 日韩在线视频免费看| 激情内射亚洲一区二区三区| 杨幂最新免费特级毛片| 国产成人无码免费看视频软件 | 国产成人精品日本亚洲专区 | 国产精品亚洲片在线花蝴蝶| 91精品全国免费观看含羞草 | 国产成人精品亚洲日本在线| 中文字幕无码免费久久9一区9| 免费观看的av毛片的网站| 久久亚洲日韩看片无码| GOGOGO高清免费看韩国| 国产成人免费a在线资源| 亚洲伊人久久大香线蕉在观| 欧洲人成在线免费| 亚洲午夜精品一级在线播放放| 亚洲精品国产av成拍色拍| 69精品免费视频| 亚洲成a人片在线观看日本| 特级毛片爽www免费版| 日韩免费毛片视频| 亚洲人成网站看在线播放|