Hibernate之延迟加载类对象Lazy特征实例介绍



Hibernate之延迟加载类对象Lazy特征实例介绍,Lazy属性有哪些?hibernate支持lazy策略只有在session打开状态下有效。

hibernate lazy策略可使用在:

* 标签上,可以取值:true/false

* 标签上,可以取值:true/false需要类增强工具

* 标签上,可以取值:true/false/extra

* 单端关联上,可以取值:false/proxy/noproxy

标签上lazy特性介绍

lazy概念:只有真正使用该对象时,才会创建,对于hibernate而言,正真使用的时候才会发出sql。标签上的lazy特性只对普通属性起作用

代码实现实例:


Group.java

public class Group {	
	private int id;	
	private String name;

 

Group.hbm.xml

	<class name="Group" table="t_group">
		id">

		name"/>
	class>

测试代码实例:

/**
 * 运行本单元测试的条件: * 	
 * 设置标签上的lazy=true,也就是默认配置
 */
public class ClassLazyTest extends TestCase {
	public void testLoad1() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();			
			//不会发出sql
			Group group = (Group)session.load(Group.class, 1);
			//不会发出sql
			System.out.println("group.id=" + group.getId());
			//会发出sql
			System.out.println("group.name=" + group.getName());	
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}	
	public void testLoad2() {
		Session session = null;
		Group group = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();			
			group = (Group)session.load(Group.class, 1);			
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}		
		//不能正确输出,抛出LazyInitializationException 异常,
//因为session已经关闭
		//hibernate支持lazy策略只有在session打开状态下有效
		System.out.println("group.name=" + group.getName());
	}	

}