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