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());
}
}