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

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

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

    隨筆-124  評論-49  文章-56  trackbacks-0

    lazy策略可以使用在:
       * <class>標簽上,可以取值:true/false
       * <property>標簽上,可以取值:true/false需要類增強工具
       * <set><list>標簽上,可以取值:true/false/extra
       * <one-to-one><many-to-one>單端關聯上,可以取值:false/proxy/noproxy
    lazy概念:只有真正使用該對象時,才會創建,對于hibernate而言,正真使用時才會發出sql

    注意:hibernate支持lazy策略只有在session打開關態下有效
          <class>標簽上的lazy特性只對普通屬性起作用,不會影響到集合上的lazy特性
          <class>標簽上的lazy特性只對普通屬性起作用,不會影響到單端關聯上的lazy特性
    在jsp中使用OpenSessionInview模式,一般采用filter實現


    lazy策略在<class>上
    //設置<class>標簽上的lazy="true",也就是默認配置
        public void testload1(){
            Session session
    =null;
            
    try{
                session
    =HibernateUtils.getSession();
                session.beginTransaction();
                
    //不會發sql
                Group g=(Group)session.load(Group.class1);
                
    //不會發sql
                System.out.println(g.getId());
                
    //會發sql
                System.out.println(g.getName());
            
                session.getTransaction().commit();
            }
    catch(Exception e){
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally{
                HibernateUtils.closeSession(session);
            }

        }

        
        
    public void testload2(){
            Session session
    =null;
            Group g
    =null;
            
    try{
                session
    =HibernateUtils.getSession();
                session.beginTransaction();
                
    //不會發sql
                g=(Group)session.load(Group.class1);
                
    //不會發sql
                session.getTransaction().commit();
            }
    catch(Exception e){
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally{
                HibernateUtils.closeSession(session);
            }

            
    //不能正確輸出,拋出lazy初始化lazyInitializationException異常,因為session已經關閉
            
    //hibernate支持lazy策略只有在session打開關態下有效
            System.out.println(g.getName());
        }

    lazy策略在<set><list>上
    <class>標簽上的lazy特性只對普通屬性起作用,不會影響到集合上的lazy特性
    //保持lazy是默認配置
    public void testLoad1(){
            Session session
    =null;
            
    try{
                session
    =HibernateUtils.getSession();
                session.beginTransaction();
                
    //不會發出sql
                Classes classes=(Classes)session.load(Classes.class3);
                
    //會發出sql
                System.out.println(classes.getName());
                
    //不會發出sql
                Set students=classes.getStudents();
                
    //會發出sql,發出查詢全部數據的sql
                System.out.println(students.size());
                session.getTransaction().commit();
            }
    catch(Exception e){
                session.getTransaction().rollback();
                e.printStackTrace();
            }
    finally{
                HibernateUtils.closeSession(session);
            }

        }

        
        
    //設置<class>標簽上的lazy="false"
      public void testLoad1(){
            Session session
    =null;
            
    try{
                session
    =HibernateUtils.getSession();
                session.beginTransaction();
                
    //會發出sql
                Classes classes=(Classes)session.load(Classes.class3);
                
    //不會發出sql
                System.out.println(classes.getName());
                
    //不會發出sql,不會影響集合
                Set students=classes.getStudents();
                
    //會發出sql,發出查詢全部數據的sql
                System.out.println(students.size());
                session.getTransaction().commit();
            }
    catch(Exception e){
                session.getTransaction().rollback();
                e.printStackTrace();
            }
    finally{
                HibernateUtils.closeSession(session);
            }

        }

        
        
    //設置集合上的lazy="false",其他全為默認
      public void testLoad1(){
            Session session
    =null;
            
    try{
                session
    =HibernateUtils.getSession();
                session.beginTransaction();
                
    //不會發出sql
                Classes classes=(Classes)session.load(Classes.class3);
                
    //會發出sql,會發出兩條sql分別加載classes和Student
                System.out.println(classes.getName());
                
    //不會發出sql
                Set students=classes.getStudents();
                
    //不會發出sql
                System.out.println(students.size());
                session.getTransaction().commit();
            }
    catch(Exception e){
                session.getTransaction().rollback();
                e.printStackTrace();
            }
    finally{
                HibernateUtils.closeSession(session);
            }

        }

        
            
    //設置集合上的lazy="extra",其他全為默認(比智能,基本與lazy="true"相同)
        public void testLoad1(){
            Session session
    =null;
            
    try{
                session
    =HibernateUtils.getSession();
                session.beginTransaction();
                
    //不會發出sql
                Classes classes=(Classes)session.load(Classes.class3);
                
    //會發出sql
                System.out.println(classes.getName());
                
    //不會發出sql
                Set students=classes.getStudents();
                
    //會發出sql,發出一條比較智能的sql
                System.out.println(students.size());
                session.getTransaction().commit();
            }
    catch(Exception e){
                session.getTransaction().rollback();
                e.printStackTrace();
            }
    finally{
                HibernateUtils.closeSession(session);
            }

        }

    lazy策略在<one-to-one><many-to-one>單端關聯上
    可以取值:false/proxy/noproxy,默認為proxy,noproxy為不用代理,使用自解碼,要使用增強工具
    //所有lazy全為默認
    public void testload1(){
            Session session
    =null;
            
    try{
                session
    =HibernateUtils.getSession();
                session.beginTransaction();
                
    //不會發出sql
                User user=(User)session.load(User.class3);
                
    //會發出sql
                System.out.println(user.getName());
                
    //不會發出sql
                Group group=user.getGroup();
                
    //會發出sql
                System.out.println(group.getName());
                session.getTransaction().commit();
            }
    catch(Exception e){
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally{
                HibernateUtils.closeSession(session);
            }

        }

        
        
    //設置<many-to-one>的lazy="false",其他全為默認,效果同集合
    public void testload1(){
            Session session
    =null;
            
    try{
                session
    =HibernateUtils.getSession();
                session.beginTransaction();
                
    //不會發出sql
                User user=(User)session.load(User.class3);
                
    //會發出sql,會發出兩條sql分別加載Group和User
                System.out.println(user.getName());
                
    //不會發出sql
                Group group=user.getGroup();
                
    //不會發出sql
                System.out.println(group.getName());
                session.getTransaction().commit();
            }
    catch(Exception e){
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally{
                HibernateUtils.closeSession(session);
            }

        }

        
        
    //設置<class>標簽上的lazy="false",其他全默認,效果同集合
        <class>標簽上的lazy特性只對普通屬性起作用,不會影響到<many-to-one>的lazy特性
        
    public void testload1(){
            Session session
    =null;
            
    try{
                session
    =HibernateUtils.getSession();
                session.beginTransaction();
                
    //會發出sql
                User user=(User)session.load(User.class3);
                
    //不會發出sql
                System.out.println(user.getName());
                
    //不會發出sql,不會影響到<many-to-one>
                Group group=user.getGroup();
                
    //會發出sql
                System.out.println(group.getName());
                session.getTransaction().commit();
            }
    catch(Exception e){
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally{
                HibernateUtils.closeSession(session);
            }

        }

    posted on 2009-11-03 16:33 junly 閱讀(532) 評論(0)  編輯  收藏 所屬分類: hibernate/orm
    主站蜘蛛池模板: 午夜爱爱免费视频| 97公开免费视频| 日韩亚洲精品福利| 色一情一乱一伦一视频免费看| 好吊妞在线成人免费| 亚洲日韩AV一区二区三区中文| 性感美女视频在线观看免费精品 | 国内精品久久久久影院亚洲| 8x成人永久免费视频| 亚洲美女视频一区| 日韩在线免费视频| 亚洲国产欧洲综合997久久| 免费毛片在线播放| 日韩大片免费观看视频播放| 亚洲精品成人a在线观看| 国产午夜无码精品免费看动漫 | 亚洲色成人网一二三区| 青青视频观看免费99| 亚洲国产精品成人AV在线 | 久久99免费视频| 亚洲精品无码久久毛片波多野吉衣 | 亚洲av女电影网| 中国在线观看免费国语版| 亚洲精品国产suv一区88| 亚洲男人的天堂一区二区| 成在人线av无码免费高潮喷水 | 老司机午夜在线视频免费观| 亚洲日韩一页精品发布| 亚欧人成精品免费观看| 亚洲av综合日韩| 国产成人精品日本亚洲| 免费av欧美国产在钱| 一个人看的www免费在线视频| 亚洲高清在线观看| 日韩高清免费观看| 日本视频免费高清一本18| 自拍偷区亚洲国内自拍| 亚洲性猛交XXXX| 日本特黄特黄刺激大片免费| 成人A片产无码免费视频在线观看| 亚洲一区二区三区乱码在线欧洲|