hibernate怠け者ロード


           ,       。
       ,          ,          。     (lazy)      ,    。
         ,                  。
           ,               ,         ,
         ,       ,         ,
                ,           。
    ENTITY   ENTITY,     1  ,  lazy    false,            po,                  po     。                   ,           ,    po          。  lazy   true,          po               po   。
 
hibernate3.0 lazy    ,true,false,proxy,    lazy="proxy".
             ,             。
   student       head  
       student         head      ,         ,             student        student head,hibernate                  sql       。            ,         1+N sql  :  “1”   student   ,“N”   N student id   head N   。  ,                  ,            ,            ,             !
  ,          student      head  ,           ,    2           1        。
                 
                         ,                   ,           。 Hibernate                        ,   Hibernate3             。
A、          
              ,                     ,    :

 
    ……
 

        class lazy     true,            。           :
    User user=(User)session.load(User.class,”1”);(1)
    System.out.println(user.getName());(2)
      (1)  ,Hibernate           ,            ,    user       ,      ,         User$EnhancerByCGLIB$$bede8986     ,      null,       ?session.load()               ,            User        。 Hibernate      CGLIB,                   ,                       ,           null。             ,         User  ,         CGLIB$CALBACK_0.target   ,      (2)  ,     user.getName()  ,    CGLIB       ,     CGLIB$CALBACK_0.getName()  ,        ,Hibernate     CGLIB$CALBACK_0.target     null,     ,        getName   ,    ,         ,       SQL  :select * from user where id=’1’;     ,       ,       CGLIB$CALBACK_0.target   。
    ,          ,Hibernate          ,                     ,             。                      ,    session.load()            ,    session.load()                。
B、         
   Hibernate        ,         ,        ,                  ,  Hibernate        ,     JDK Collection     ,       ,            Set  ,   java.util.Set       ,   net.sf.hibernate.collection.Set  ,             ,Hibernate            。              ,                 :

   
     ……
    
     
      
    
   

         lazy     true              。      :
 User user=(User)session.load(User.class,”1”);
 Collection addset=user.getAddresses();      (1)
 Iterator it=addset.iterator();               (2)
 while(it.hasNext()) {
  Address address=(Address)it.next();
  System.out.println(address.getAddress());
 }
           (1)  ,                    ,     (2)  ,             ,  Hibernate               ,            。
                 ——    ,              。 Hibernate           ,          ,             id  ,        ,       id  ,         。        ,             ,       select SQL   ,         ,              ,           ,              Hibernate      。    ,           ,         id  ,    id           ,           ,      ,    select SQL  。              ,              ,            。          :

   
      
      
      
    
   

            ,               ,Hibernate            ,                。           :
 User user=(User)session.load(User.class,”1”);
 Collection addset=user.getAddresses();      
 Iterator it=addset.iterator();               
 while(it.hasNext()) {
  Address address=(Address)it.next();
  System.out.println(address.getAddress());
 }
 System.out.println(“Second query……”);
 User user2=(User)session.load(User.class,”1”);
 Collection it2=user2.getAddresses();
 while(it2.hasNext()) {
  Address address2=(Address)it2.next();
  System.out.println(address2.getAddress());
 }
        ,          :
   Select * from user where id=’1’;
   Select * from address where user_id=’1’;
   Tianjin
   Dalian
   Second query……
   Select * from address where id=’1’;
   Select * from address where id=’2’;
   Tianjin
   Dalian    
      ,         ,      address      ,       ?             ,              ,             ,                 ,             ,Hibernate            ,         ,              ,  Hibernate              select SQL     ,           ,           ?                  ,         :

   
    ……
     
       
       
       
     
   

    Hibernate               ,         ,           : 
   Select * from user where id=’1’;
   Select * from address where user_id=’1’;
   Tianjin
   Dalian
   Second query……
   Tianjin
   Dalian 
                    SQL  ,                          。
C、      
      Hibernate3 ,         ——       ,                     。         ,   User       resume  ,      java.sql.Clob  ,          ,       ,              ,           ,                        。 Hibernate2 ,             ,   User ,        ,   Hibernate3 ,            ,                      ,             ,            :
 
  
      ……
     
  
 
           lazy    true          , Hibernate3            ,              Class        ,        , CGLIB       ,     ,               ,     CGLIB    。CGLIB Apache       ,        java     ,                  。                 :
 String sql=”from User user where user.name=’zx’ ”;
 Query query=session.createQuery(sql);   (1)
 List list=query.list();
 for(int i=0;i