我们知道如果对象中存在其他实体的集合则需要在hbm文件中配置set元素来进行表间的映射,而在set元素中也可以添加lazy属性其取值为:true:延迟加载(默认值)、false:立即加载、extra:加强延时加载。
在这里不再对false的取值进行测试主要来测试true和extra的区别。我们再实例一的基础上引入Dept(部门)类来进行测试:
部门实体类:
部门表映射文件:
测试代码:
lazy属性值为true:
Lazy属性值为extra:
有延时加载而引发的no Session问题当我们在编写基于分层的B/s程序时常常会因为Session提前关闭而数据没有加载完成而引发no Session的异常如图所示:
该异常引发的原因时同城操作数据的代码编写在DAO层和Biz层但是这两层并不负责数据的展示而我们在jsp页面中对数据进行展示时Session早已关闭并且有与延迟加载的关系数据并没有加载到对象中,当jsp页面去访问对象属性时Hibernate尝试使用Session对象去和数据库交互时发现并没有可用的Session对象从而引发该异常。
对于此类问题同城的做法是利用过滤器(Filter)将Session对象存放在表示层。如下代码所示创建过滤器:
然后在web.xml文件中配置过滤器:
经过以上操作就可以解决no Session的问题。当然还有其他的解决方案,但这种方案是使用最多的也是较为完善的解决方案,
缓存缓存的定义
缓存是为了减少应用程序和数据库交互次数而将一些修改频率较低、查询频繁的非关键性数据单独开辟一块空间存放起来的一块空间!是以一定范围内的空间换取用户从数据库查询数据的速度和性能的一种解决方案!
通常缓存分为以下几类:
内部缓存、二级缓存、查询缓存以及第三方缓存实现。
内部缓存