您的位置:首页 > 其它

Hibernate学习24 -- 延迟加载1 -- 类对象Lazy特征

2009-12-07 12:18 357 查看
hibernate支持lazy策略只有在session打开状态下有效。
hibernate lazy策略可以使用在:
* 标签上,可以取值:true/false
* 标签上,可以取值:true/false需要类增强工具
* 标签上,可以取值:true/false/extra
* 单端关联上,可以取值:false/proxy/noproxy

1.1. 标签上lazy特性

lazy概念:只有真正使用该对象时,才会创建,对于hibernate而言,正真使用的时候才会发出sql。标签上的lazy特性只对普通属性起作用
代码实现:
Group.java
public class Group {
private int id;
private String name;


Group.hbm.xml


id">
class="native"/>

name"/>


测试代码:

/**
* 运行本单元测试的条件: *
* 设置标签上的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());
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: