hibernate lazy策略

lazy策略可以用在:
* <class>標籤上:可以取值true/false
* <property>標籤上,可以取值true/false,這個特性需要類增強
* <set>/<list>等集合上,可以取值爲true/false/extra
* <one-to-one>/<many-to-one>等標籤上,可以取值false/proxy/no-proxy

重要的概念:
1、lazy的概念,指在需要的時候才發出sql
2、lazy策略只是在session打開期間纔是有效的

注意:
Hibernate類級別的lazy加載策略:可以控制什麼時候加載這些普通對象屬性

測試單元的使用:
請先運行初時化程序InitData,在執行每個單元測試


Hibernate集合屬性的懶加載策略:

在集合屬性上,可以配置懶加載策略,取值爲:true/false/extra

true:默認取值,它的意思是只有在調用這個集合獲取裏面的元素對象時,才發出查詢語句,加載其
     集合元素的數據
false:取消懶加載特性,即在加載對象的同時,就發出第二條查詢語句加載其關聯集合的數據
extra:一種比較聰明的懶加載策略,即調用集合的size/contains等方法的時候,hibernate並不會去加載整個集合的數據,而是發出一條聰明的SQL語句,以便獲得需要的值,只有在真正需要用到這些集合元素對象數據的時候,纔去發出查詢語句加載所有對象的數據


Hibernate單端關聯懶加載策略:即在<one-to-one>/<many-to-one>標籤上可以配置
懶加載策略。

可以取值爲:false/proxy/no-proxy
false:取消懶加載策略,即在加載對象的同時,發出查詢語句,加載其關聯對象
proxy:這是hibernate對單端關聯的默認懶加載策略,即只有在調用到其關聯對象的方法的時候
      才真正發出查詢語句查詢其對象數據,其關聯對象是代理類
no-proxy:這種懶加載特性需要對類進行增強,使用no-proxy,其關聯對象不是代理類

注意:在class標籤上配置的lazy屬性不會影響到關聯對象!!!



Java代碼 複製代碼
  1. <hibernate-mapping>   
  2.     <class name="com.bjsxt.hibernate.Group" table="t_group">   
  3.         <id name="id">   
  4.             <generator class="native"/>   
  5.         </id>   
  6.         <property name="name"/>   
  7.     </class>   
  8. </hibernate-mapping>    
<hibernate-mapping>
	<class name="com.bjsxt.hibernate.Group" table="t_group">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
	</class>
</hibernate-mapping>	



Java代碼 複製代碼
  1. package com.bjsxt.hibernate;   
  2. import org.hibernate.Session;   
  3.   
  4. import com.bjsxt.hibernate.Group;   
  5. import com.bjsxt.hibernate.HibernateUtils;   
  6.   
  7.   
  8. public class InitData {   
  9.   
  10.     public static void main(String[] args) {   
  11.         Session session = null;   
  12.         try {   
  13.             session = HibernateUtils.getSession();   
  14.             session.beginTransaction();   
  15.             Group group = new Group();   
  16.             group.setName("java開發組");   
  17.             session.save(group);   
  18.             session.getTransaction().commit();   
  19.         }catch(Exception e) {   
  20.             e.printStackTrace();   
  21.             session.getTransaction().rollback();   
  22.         }finally {   
  23.             HibernateUtils.closeSession(session);   
  24.         }      
  25.     }   
  26.   
  27. }  
package com.bjsxt.hibernate;
import org.hibernate.Session;

import com.bjsxt.hibernate.Group;
import com.bjsxt.hibernate.HibernateUtils;


public class InitData {

	public static void main(String[] args) {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			Group group = new Group();
			group.setName("java開發組");
			session.save(group);
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}	
	}

}


Java代碼 複製代碼
  1.   
  2. package com.bjsxt.hibernate;   
  3.   
  4. import org.hibernate.Session;   
  5.   
  6. import junit.framework.TestCase;   
  7.   
  8. /**  
  9.  * 運行本單元測試的前提條件:  
  10.  * 設置<class>標籤中的lazy="true",或是保持默認(即不配置lazy屬性)  
  11.  *   
  12.  * @author Administrator  
  13.  *  
  14.  */  
  15. public class ClassLazyTest extends TestCase {   
  16.   
  17.     public void testLoadGroup1() {   
  18.         Session session = null;   
  19.         try {   
  20.             session = HibernateUtils.getSession();   
  21.                
  22.             //不會發出查詢sql   
  23.             Group group = (Group)session.load(Group.class1);   
  24.                
  25.             //不會發出查詢sql   
  26.             System.out.println("group id=" + group.getId());   
  27.                
  28.             //發出查詢sql,加載數據到Group   
  29.             System.out.println("group name=" + group.getName());   
  30.                
  31.             //不會發出查詢sql   
  32.             System.out.println("group name=" + group.getName());   
  33.         }catch(Exception e) {   
  34.             e.printStackTrace();   
  35.         }finally {   
  36.             HibernateUtils.closeSession(session);   
  37.         }      
  38.     }   
  39.   
  40.     public void testLoadGroup2() {   
  41.         Session session = null;   
  42.         Group group = null;   
  43.         try {   
  44.             session = HibernateUtils.getSession();   
  45.                
  46.             //不會發出查詢sql   
  47.             group = (Group)session.load(Group.class1);   
  48.                
  49.         }catch(Exception e) {   
  50.             e.printStackTrace();   
  51.         }finally {   
  52.             HibernateUtils.closeSession(session);   
  53.         }   
  54.         //不能正常輸出,拋出了 LazyInitializationException,因爲session已經關閉了   
  55.         //注意:Hibernate支持Lazy策略,只有session打開狀態纔有效        
  56.         System.out.println("group name=" + group.getName());   
  57.            
  58.     }   
  59.        
  60.        
  61. }  
package com.bjsxt.hibernate;

import org.hibernate.Session;

import junit.framework.TestCase;

/**
 * 運行本單元測試的前提條件:
 * 設置<class>標籤中的lazy="true",或是保持默認(即不配置lazy屬性)
 * 
 * @author Administrator
 *
 */
public class ClassLazyTest extends TestCase {

	public void testLoadGroup1() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			
			//不會發出查詢sql
			Group group = (Group)session.load(Group.class, 1);
			
			//不會發出查詢sql
			System.out.println("group id=" + group.getId());
			
			//發出查詢sql,加載數據到Group
			System.out.println("group name=" + group.getName());
			
			//不會發出查詢sql
			System.out.println("group name=" + group.getName());
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			HibernateUtils.closeSession(session);
		}	
	}

	public void testLoadGroup2() {
		Session session = null;
		Group group = null;
		try {
			session = HibernateUtils.getSession();
			
			//不會發出查詢sql
			group = (Group)session.load(Group.class, 1);
			
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			HibernateUtils.closeSession(session);
		}
		//不能正常輸出,拋出了 LazyInitializationException,因爲session已經關閉了
		//注意:Hibernate支持Lazy策略,只有session打開狀態纔有效		
		System.out.println("group name=" + group.getName());
		
	}
	
	
}





---------------------------------------------------------------------
集合類測試

Java代碼 複製代碼
  1. <hibernate-mapping>   
  2.     <class name="com.bjsxt.hibernate.Classes" table="t_classes">   
  3.         <id name="id">   
  4.             <generator class="native"/>   
  5.         </id>   
  6.         <property name="name"/>   
  7.         <!--    
  8.             <set name="students" cascade="all" order-by="id">   
  9.          -->   
  10.          <set name="students" lazy="extra">   
  11.             <key column="classid"/>   
  12.             <one-to-many class="com.bjsxt.hibernate.Student"/>   
  13.         </set>   
  14.     </class>   
  15. </hibernate-mapping>   
  16.   
  17. <hibernate-mapping>   
  18.     <class name="com.bjsxt.hibernate.Student" table="t_student">   
  19.         <id name="id">   
  20.             <generator class="native"/>   
  21.         </id>   
  22.         <property name="name"/>   
  23.     </class>   
  24. </hibernate-mapping>  
<hibernate-mapping>
	<class name="com.bjsxt.hibernate.Classes" table="t_classes">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<!-- 
			<set name="students" cascade="all" order-by="id">
		 -->
		 <set name="students" lazy="extra">
			<key column="classid"/>
			<one-to-many class="com.bjsxt.hibernate.Student"/>
		</set>
	</class>
</hibernate-mapping>

<hibernate-mapping>
	<class name="com.bjsxt.hibernate.Student" table="t_student">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
	</class>
</hibernate-mapping>



Java代碼 複製代碼
  1. package com.bjsxt.hibernate;   
  2.   
  3. import java.util.Iterator;   
  4. import java.util.Set;   
  5.   
  6. import org.hibernate.Session;   
  7.   
  8. import junit.framework.TestCase;   
  9.   
  10. /**  
  11.  * 保持lazy的默認值  
  12.  * @author Administrator  
  13.  *  
  14.  */  
  15. public class CollectionLazyTest1 extends TestCase {   
  16.        
  17.     public void testLoadClasses1() {   
  18.         Session session = null;   
  19.         try {   
  20.             session = HibernateUtils.getSession();   
  21.                
  22.             //不會發出查詢sql   
  23.             Classes classes = (Classes)session.load(Classes.class1);   
  24.                
  25.             //會發出一條查詢sql,加載數據到classes   
  26.             System.out.println("班級:【" + classes.getName() + "】  擁有的學生:");   
  27.                
  28.             //不會發出查詢sql   
  29.             Set students = classes.getStudents();   
  30.                
  31.             //會發出一條查詢sql,加載數據到Students   
  32.             for (Iterator iter = students.iterator(); iter.hasNext();) {   
  33.                 Student student = (Student)iter.next();   
  34.                 System.out.println(student.getName());   
  35.             }   
  36.         }catch(Exception e) {   
  37.             e.printStackTrace();   
  38.         }finally {   
  39.             HibernateUtils.closeSession(session);   
  40.         }      
  41.     }   
  42.        
  43.     public void testLoadClasses2() {   
  44.         Session session = null;   
  45.         try {   
  46.             session = HibernateUtils.getSession();   
  47.                
  48.             //不會發出查詢sql   
  49.             Classes classes = (Classes)session.load(Classes.class1);   
  50.                
  51.             //會發出一條查詢sql,加載數據到classes   
  52.             System.out.println("班級:【" + classes.getName() + "】  擁有的學生總數:");   
  53.   
  54.             //不會發出查詢sql    
  55.             Set students = classes.getStudents();   
  56.                
  57.             //會發出一條查詢sql,加載全部的數據到Students   
  58.             System.out.println(students.size());   
  59.                
  60.         }catch(Exception e) {   
  61.             e.printStackTrace();   
  62.         }finally {   
  63.             HibernateUtils.closeSession(session);   
  64.         }      
  65.     }   
  66.        
  67. }  
package com.bjsxt.hibernate;

import java.util.Iterator;
import java.util.Set;

import org.hibernate.Session;

import junit.framework.TestCase;

/**
 * 保持lazy的默認值
 * @author Administrator
 *
 */
public class CollectionLazyTest1 extends TestCase {
	
	public void testLoadClasses1() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			
			//不會發出查詢sql
			Classes classes = (Classes)session.load(Classes.class, 1);
			
			//會發出一條查詢sql,加載數據到classes
			System.out.println("班級:【" + classes.getName() + "】  擁有的學生:");
			
			//不會發出查詢sql
			Set students = classes.getStudents();
			
			//會發出一條查詢sql,加載數據到Students
			for (Iterator iter = students.iterator(); iter.hasNext();) {
				Student student = (Student)iter.next();
				System.out.println(student.getName());
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			HibernateUtils.closeSession(session);
		}	
	}
	
	public void testLoadClasses2() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			
			//不會發出查詢sql
			Classes classes = (Classes)session.load(Classes.class, 1);
			
			//會發出一條查詢sql,加載數據到classes
			System.out.println("班級:【" + classes.getName() + "】  擁有的學生總數:");

			//不會發出查詢sql	
			Set students = classes.getStudents();
			
			//會發出一條查詢sql,加載全部的數據到Students
			System.out.println(students.size());
			
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			HibernateUtils.closeSession(session);
		}	
	}
	
}


Java代碼 複製代碼
  1. package com.bjsxt.hibernate;   
  2.   
  3. import java.util.Iterator;   
  4. import java.util.Set;   
  5.   
  6. import org.hibernate.Session;   
  7.   
  8. import junit.framework.TestCase;   
  9.   
  10. /**  
  11.  * 設置集合上的lazy=false  
  12.  * @author Administrator  
  13.  *  
  14.  */  
  15. public class CollectionLazyTest2 extends TestCase {   
  16.        
  17.     public void testLoadClasses1() {   
  18.         Session session = null;   
  19.         try {   
  20.             session = HibernateUtils.getSession();   
  21.                
  22.             //不會發出查詢sql   
  23.             Classes classes = (Classes)session.load(Classes.class1);   
  24.                
  25.             //會發出兩條查詢sql,加載數據到classes和Students中   
  26.             System.out.println("班級:【" + classes.getName() + "】  擁有的學生:");   
  27.                
  28.             //不會發出查詢sql   
  29.             Set students = classes.getStudents();   
  30.                
  31.             //不會發出查詢sql   
  32.             for (Iterator iter = students.iterator(); iter.hasNext();) {   
  33.                 Student student = (Student)iter.next();   
  34.                 System.out.println(student.getName());   
  35.             }   
  36.         }catch(Exception e) {   
  37.             e.printStackTrace();   
  38.         }finally {   
  39.             HibernateUtils.closeSession(session);   
  40.         }      
  41.     }   
  42.        
  43.     public void testLoadClasses2() {   
  44.         Session session = null;   
  45.         try {   
  46.             session = HibernateUtils.getSession();   
  47.                
  48.             //不會發出查詢sql   
  49.             Classes classes = (Classes)session.load(Classes.class1);   
  50.                
  51.             //會發出兩條查詢sql,加載數據到classes和Students中   
  52.             System.out.println("班級:【" + classes.getName() + "】  擁有的學生總數:");   
  53.   
  54.             //不會發出查詢sql    
  55.             Set students = classes.getStudents();   
  56.                
  57.             //不會發出查詢sql    
  58.             System.out.println(students.size());   
  59.                
  60.         }catch(Exception e) {   
  61.             e.printStackTrace();   
  62.         }finally {   
  63.             HibernateUtils.closeSession(session);   
  64.         }      
  65.     }   
  66.        
  67. }  
package com.bjsxt.hibernate;

import java.util.Iterator;
import java.util.Set;

import org.hibernate.Session;

import junit.framework.TestCase;

/**
 * 設置集合上的lazy=false
 * @author Administrator
 *
 */
public class CollectionLazyTest2 extends TestCase {
	
	public void testLoadClasses1() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			
			//不會發出查詢sql
			Classes classes = (Classes)session.load(Classes.class, 1);
			
			//會發出兩條查詢sql,加載數據到classes和Students中
			System.out.println("班級:【" + classes.getName() + "】  擁有的學生:");
			
			//不會發出查詢sql
			Set students = classes.getStudents();
			
			//不會發出查詢sql
			for (Iterator iter = students.iterator(); iter.hasNext();) {
				Student student = (Student)iter.next();
				System.out.println(student.getName());
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			HibernateUtils.closeSession(session);
		}	
	}
	
	public void testLoadClasses2() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			
			//不會發出查詢sql
			Classes classes = (Classes)session.load(Classes.class, 1);
			
			//會發出兩條查詢sql,加載數據到classes和Students中
			System.out.println("班級:【" + classes.getName() + "】  擁有的學生總數:");

			//不會發出查詢sql	
			Set students = classes.getStudents();
			
			//不會發出查詢sql	
			System.out.println(students.size());
			
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			HibernateUtils.closeSession(session);
		}	
	}
	
}

Java代碼 複製代碼
  1. package com.bjsxt.hibernate;   
  2.   
  3. import java.util.Iterator;   
  4. import java.util.Set;   
  5.   
  6. import org.hibernate.Session;   
  7.   
  8. import junit.framework.TestCase;   
  9.   
  10. /**  
  11.  * 設置集合上的lazy=extra  
  12.  * @author Administrator  
  13.  *  
  14.  */  
  15. public class CollectionLazyTest3 extends TestCase {   
  16.        
  17.     public void testLoadClasses1() {   
  18.         Session session = null;   
  19.         try {   
  20.             session = HibernateUtils.getSession();   
  21.                
  22.             //不會發出查詢sql   
  23.             Classes classes = (Classes)session.load(Classes.class1);   
  24.                
  25.             //會發出一條查詢sql,加載數據到classes   
  26.             System.out.println("班級:【" + classes.getName() + "】  擁有的學生:");   
  27.                
  28.             //不會發出查詢sql   
  29.             Set students = classes.getStudents();   
  30.                
  31.             //會發出一條查詢sql,加載數據到students   
  32.             for (Iterator iter = students.iterator(); iter.hasNext();) {   
  33.                 Student student = (Student)iter.next();   
  34.                 System.out.println(student.getName());   
  35.             }   
  36.         }catch(Exception e) {   
  37.             e.printStackTrace();   
  38.         }finally {   
  39.             HibernateUtils.closeSession(session);   
  40.         }      
  41.     }   
  42.        
  43.     public void testLoadClasses2() {   
  44.         Session session = null;   
  45.         try {   
  46.             session = HibernateUtils.getSession();   
  47.                
  48.             //不會發出查詢sql   
  49.             Classes classes = (Classes)session.load(Classes.class1);   
  50.                
  51.             //會發出一條查詢sql,加載數據到classes   
  52.             System.out.println("班級:【" + classes.getName() + "】  擁有的學生總數:");   
  53.   
  54.             //不會發出查詢sql    
  55.             Set students = classes.getStudents();   
  56.   
  57.             //會發出一條較爲智能的查詢sql,如:   
  58.             //select count(id) from t_student where classid =?   
  59.             System.out.println(students.size());   
  60.                
  61.         }catch(Exception e) {   
  62.             e.printStackTrace();   
  63.         }finally {   
  64.             HibernateUtils.closeSession(session);   
  65.         }      
  66.     }   
  67.        
  68. }  
package com.bjsxt.hibernate;

import java.util.Iterator;
import java.util.Set;

import org.hibernate.Session;

import junit.framework.TestCase;

/**
 * 設置集合上的lazy=extra
 * @author Administrator
 *
 */
public class CollectionLazyTest3 extends TestCase {
	
	public void testLoadClasses1() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			
			//不會發出查詢sql
			Classes classes = (Classes)session.load(Classes.class, 1);
			
			//會發出一條查詢sql,加載數據到classes
			System.out.println("班級:【" + classes.getName() + "】  擁有的學生:");
			
			//不會發出查詢sql
			Set students = classes.getStudents();
			
			//會發出一條查詢sql,加載數據到students
			for (Iterator iter = students.iterator(); iter.hasNext();) {
				Student student = (Student)iter.next();
				System.out.println(student.getName());
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			HibernateUtils.closeSession(session);
		}	
	}
	
	public void testLoadClasses2() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			
			//不會發出查詢sql
			Classes classes = (Classes)session.load(Classes.class, 1);
			
			//會發出一條查詢sql,加載數據到classes
			System.out.println("班級:【" + classes.getName() + "】  擁有的學生總數:");

			//不會發出查詢sql	
			Set students = classes.getStudents();

			//會發出一條較爲智能的查詢sql,如:
			//select count(id) from t_student where classid =?
			System.out.println(students.size());
			
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			HibernateUtils.closeSession(session);
		}	
	}
	
}

----------------------------------------------------------------

單端關聯加載



Java代碼 複製代碼
  1.   
  2. <hibernate-mapping>   
  3.     <class name="com.bjsxt.hibernate.Group" table="t_group">   
  4.         <id name="id">   
  5.             <generator class="native"/>   
  6.         </id>   
  7.         <property name="name"/>   
  8.     </class>   
  9. </hibernate-mapping>   
  10.   
  11. <hibernate-mapping>   
  12.     <class name="com.bjsxt.hibernate.User" table="t_user" >   
  13.         <id name="id">   
  14.             <generator class="native"/>   
  15.         </id>   
  16.         <property name="name"/>   
  17.         <!--   
  18.         <many-to-one name="group" column="relatedGroup" />   
  19.          -->   
  20.            
  21.         <many-to-one name="group" column="relatedGroup"/>    
  22.     </class>   
  23. </hibernate-mapping>        
<hibernate-mapping>
	<class name="com.bjsxt.hibernate.Group" table="t_group">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
	</class>
</hibernate-mapping>

<hibernate-mapping>
	<class name="com.bjsxt.hibernate.User" table="t_user" >
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<!--
		<many-to-one name="group" column="relatedGroup" />
		 -->
		
		<many-to-one name="group" column="relatedGroup"/> 
	</class>
</hibernate-mapping>		



Java代碼 複製代碼
  1. package com.bjsxt.hibernate;   
  2.   
  3. import org.hibernate.Session;   
  4.   
  5. import junit.framework.TestCase;   
  6.   
  7. /**  
  8.  * 所有lazy的屬性默認  
  9.  * @author Administrator  
  10.  *  
  11.  */  
  12. public class SingleEndTest1 extends TestCase {   
  13.   
  14.     public void testLoadUser() {   
  15.         Session session = null;   
  16.         try {   
  17.             session = HibernateUtils.getSession();   
  18.                
  19.             //不會發出查詢sql   
  20.             User user = (User)session.load(User.class2);   
  21.                
  22.             //會發出一條查詢sql,轉載數據到User   
  23.             System.out.println("user name=" + user.getName());   
  24.                
  25.             //不會發出查詢sql   
  26.             Group group = user.getGroup();   
  27.                
  28.             //會發出一條查詢sql,轉載數據到Group   
  29.             System.out.println("related group=" + group.getName());   
  30.                
  31.         }catch(Exception e) {   
  32.             e.printStackTrace();   
  33.         }finally {   
  34.                
  35.         }   
  36.     }   
  37. }  
package com.bjsxt.hibernate;

import org.hibernate.Session;

import junit.framework.TestCase;

/**
 * 所有lazy的屬性默認
 * @author Administrator
 *
 */
public class SingleEndTest1 extends TestCase {

	public void testLoadUser() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			
			//不會發出查詢sql
			User user = (User)session.load(User.class, 2);
			
			//會發出一條查詢sql,轉載數據到User
			System.out.println("user name=" + user.getName());
			
			//不會發出查詢sql
			Group group = user.getGroup();
			
			//會發出一條查詢sql,轉載數據到Group
			System.out.println("related group=" + group.getName());
			
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			
		}
	}
}


Java代碼 複製代碼
  1. package com.bjsxt.hibernate;   
  2.   
  3. import org.hibernate.Session;   
  4.   
  5. import junit.framework.TestCase;   
  6.   
  7. /**  
  8.  * 將<class>標籤中的lazy設置爲false  
  9.  * @author Administrator  
  10.  *  
  11.  */  
  12. public class SingleEndTest2 extends TestCase {   
  13.   
  14.     public void testLoadUser() {   
  15.         Session session = null;   
  16.         try {   
  17.             session = HibernateUtils.getSession();   
  18.                
  19.             //會發出一條查詢sql,轉載數據到User   
  20.             User user = (User)session.load(User.class2);   
  21.                
  22.             //不會發出查詢sql   
  23.             System.out.println("user name=" + user.getName());   
  24.                
  25.             //不會發出查詢sql   
  26.             Group group = user.getGroup();   
  27.                
  28.             //會發出一條查詢sql,轉載數據到Group   
  29.             System.out.println("related group=" + group.getName());   
  30.                
  31.         }catch(Exception e) {   
  32.             e.printStackTrace();   
  33.         }finally {   
  34.                
  35.         }   
  36.     }   
  37. }  
package com.bjsxt.hibernate;

import org.hibernate.Session;

import junit.framework.TestCase;

/**
 * 將<class>標籤中的lazy設置爲false
 * @author Administrator
 *
 */
public class SingleEndTest2 extends TestCase {

	public void testLoadUser() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			
			//會發出一條查詢sql,轉載數據到User
			User user = (User)session.load(User.class, 2);
			
			//不會發出查詢sql
			System.out.println("user name=" + user.getName());
			
			//不會發出查詢sql
			Group group = user.getGroup();
			
			//會發出一條查詢sql,轉載數據到Group
			System.out.println("related group=" + group.getName());
			
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			
		}
	}
}


Java代碼 複製代碼
  1. package com.bjsxt.hibernate;   
  2.   
  3. import org.hibernate.Session;   
  4.   
  5. import junit.framework.TestCase;   
  6.   
  7. /**  
  8.  * 保持<class>標籤中的lazy默認設置  
  9.  * 將<many-to-one>標籤中加入lazy=false  
  10.  * @author Administrator  
  11.  *  
  12.  */  
  13. public class SingleEndTest3 extends TestCase {   
  14.   
  15.     public void testLoadUser() {   
  16.         Session session = null;   
  17.         try {   
  18.             session = HibernateUtils.getSession();   
  19.                
  20.             //會發出一條查詢sql,轉載數據到User   
  21.             User user = (User)session.load(User.class2);   
  22.                
  23.             //不會發出查詢sql   
  24.             System.out.println("user name=" + user.getName());   
  25.                
  26.             //不會發出查詢sql   
  27.             Group group = user.getGroup();   
  28.                
  29.             //會發出一條查詢sql,轉載數據到Group   
  30.             System.out.println("related group=" + group.getName());   
  31.                
  32.         }catch(Exception e) {   
  33.             e.printStackTrace();   
  34.         }finally {   
  35.                
  36.         }   
  37.     }   
  38. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章