<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
    主站蜘蛛池模板: 亚洲高清不卡视频| 国产精品亚洲专区在线播放| 大学生一级毛片免费看| 亚洲爆乳精品无码一区二区| 久久国产成人精品国产成人亚洲 | 色窝窝亚洲AV网在线观看| 在线观看亚洲精品国产| 成年黄网站色大免费全看| 污污免费在线观看| 亚洲最大的成网4438| 丁香亚洲综合五月天婷婷| 最近2019中文字幕免费直播| 国产成人综合亚洲| 亚洲最大的视频网站| 亚洲国产成人精品无码久久久久久综合| 无码人妻丰满熟妇区免费| 美女18毛片免费视频| 亚洲国产成人久久综合一区| 久久乐国产精品亚洲综合| 国产精品免费观看久久| 日韩a级无码免费视频| 亚洲AV色无码乱码在线观看| 亚洲精品熟女国产| 久久亚洲精品无码播放| 97无码免费人妻超级碰碰碰碰 | 东方aⅴ免费观看久久av| 国产亚洲视频在线观看网址 | 黄色一级视频免费| 亚洲乱码一区av春药高潮| 亚洲午夜未满十八勿入网站2| 国产精品无码一区二区三区免费 | 亚洲色精品vr一区二区三区| 日韩在线免费看网站| 国产精品1024永久免费视频| 免费精品久久天干天干| 思思久久99热免费精品6| 中文字幕乱码亚洲无线三区 | 亚洲最大的黄色网| 亚洲天堂视频在线观看| 亚洲日本va在线视频观看| 四虎国产精品免费视|