今天博主遇到了问题了~
问题是这样的
我写了一个DepartmengDao的一个类,内部包装了一个HibernateTemplate ,在DepartmengDao里写一个方法的时候,我要获取一个属性,
xxx = hibernateTemplate.load(XXX.class,Serializable id);
xxx.getName();
博主当执行到第二句的时候就开始爆了一个错误 NO Session.博主一脸懵逼(原来博主还是个小白)
后来我才知道,原来是hibernate 的懒加载
一个是get() 一个是load()
get()是直接加载,并不是直接去数据库查询,如果缓存里有,首先到缓存里找,缓存分为一级缓存和二级缓存,首先到一级缓存中查找;如果在session关闭之后进行获取类的名字之类的属性,
load()懒加载,他不会直接进行操作,就是除了获取id(标识符)和类.class时,获取其他的类属性都会进行操作
Account acc=(Account)session.load(Account.class,new Long(1));
这里的 acc 是一个代理对象,如果只获取他的id,则不会加载,不会出现select语句,只有获取除他和本身之外才会进行查找;否则访问的只是他的代理对象而已;
这里有更加详细的博文:http://blog.youkuaiyun.com/liuxiaogangqq/article/details/8462172