Hibernate 延迟加载在调试的时候
基本在many-to-one时,如果我们设置了延迟加载,
会发现我们在eclipse的调试中查看one对应对象时,
它的内部成员变量全是null的,这个其实就是它的延迟加载的效果。
如下图是延迟的状态:
下面这个是非延迟的
下面附上代码,简单的一个延迟加载的代码和注释
/**
* 通过调用其getDeptName( )等方法可以促使Hibernate执行查询,获得数据从而完成该代理实例的初始化
*/
@Test
public void eg15_1() {
Session session = null;
Transaction tx = null;
try {
// 打开session
session = HibernateUtil.currentSession();
// 开启事务
tx = session.beginTransaction();
// 加载Dept对象
Dept dept = (Dept) session.load(Dept.class, new Byte("10"));
//执行完上面的代码,其实它的那个值延迟到代理对象去了,
也就是讲,现在dept对象其实是个光杆司令,会在执行下面的dept.getDeptName()时候,就去查询数据,
这个地方跟SpringIOC的增强方法很想,比如你在执行输出的值的操作,和insert或是update的时候,会在你需要值的时候给你值!
以下方法:假如返回的是个集合那么
size()方法也是没有长度的
还有isEmpty()方法判断值都是为空的。
还是那句话。它会在你需要值的时候出现在你身边!
System.out.println("====================load()方法执行完毕===================");
System.out.println(dept.getDeptName());
tx.commit();
} catch (Exception e) {
e.printStackTrace();
// 回滚事务
if (tx != null)
tx.rollback();
}
}