Hibernate 懒加载解决方案
来源:互联网 发布:关联规则算法有哪些 编辑:程序博客网 时间:2024/05/16 19:36
使用Hibernate 都会遇到这样一个问题就是,懒加载。
问题描述:
当session关闭的时候,即系统在业务层方法调用完毕的时候,例如:只查询的User的对象,而没有将ElecUser(用户)对象关联的ElecRole(权限)查询出来,此时再session关闭之后,再次调用集合方法的时候,就会产生懒加载异常,产生懒加载异常的条件,与查询对象关联的对象没有查询,也就是没有产生sql语句。
解决方案:
方案一:在业务层Session关闭之前,调用与对象关联的对象的除了id之外的其他属性,就可以查询出所关联的对象。
代码:在Service层修改:
ElecUser elecUser = null;
if(list!=null && list.size()>0) {
elecUser = list.get(0);
elecUser.getElecRoles().size();
}
方案二:在业务层Session关闭之前,使用Hibernate.initialize
//由于登录名对应唯一的对象
ElecUser elecUser = null;
if(list!=null && list.size()>0) {
elecUser = list.get(0);
Hibernate.initialize(elecUser.getElecRoles());
}
方案三:查询用户的同时,同时将用户关联的角色集合查询出来,修改ElecUser.hbm.xml文件中的set元素的lazy属性即可
<set name="elecRoles" table="elec_user_role" lazy="false">
<key>
<column name="userID"></column>
</key>
<many-to-many class="cn.itcast.elec.domain.ElecRole" column="roleID"/>
</set>
缺点:不管是否用到角色,都会查询出来,影响性能。
方案四:在web容器中添加过滤器(spring整合hibernate提供的)OpenSessionInViewFilter,作用使用延迟的Session的关闭时间,在返回的页面之前调用关联的属性都可以,该过滤器一定要添加到struts2过滤器的前面。
缺点:如果项目在页面一端压力很大,显示页面的时候查询数据较多,不建议使用OpenSessionInViewFilter。会存在连接不够用,在页面端压力很大。
- Hibernate 懒加载解决方案
- hibernate懒加载异常解决方案.
- Hibernate @OneToOne懒加载实现解决方案
- Hibernate懒加载异常理解和解决方案
- Hibernate懒加载的三种解决方案
- Hibernate懒加载常见问题及解决方案
- 关于Hibernate懒加载问题的最终解决方案
- 关于spring整合hibernate 懒加载异常解决方案
- 关于Hibernate懒加载问题的最终解决方案
- hibernate注解(1-2-3)+Hibernate @OneToOne懒加载实现解决方案
- Hibernate延迟加载Session关闭的解决方案
- Hibernate延迟加载问题及解决方案
- hibernate 懒加载、延时加载
- Web应用程序中Hibernate的懒加载异常说明及解决方案
- Hibernate懒加载特性
- Hibernate懒加载策略
- Hibernate懒加载策略
- Hibernate懒加载简述
- Object类:hashCode() 与 equals() 的关系
- 栈
- 三人年龄 三个神秘蒙面人来访F博士。博士询问他们年龄时,他们说:我们中年龄最小的不超过19岁。我们3人年龄总和为70岁。且我们三人年龄的乘积是所有可能情况中最大的。
- 如何搜集企业域中所有电脑的硬件配置信息
- 插入排序
- Hibernate 懒加载解决方案
- 最大子序列和问题
- 假设有两种微生物 X 和 YX出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。
- 弱符号__attribute__((weak))
- C.Interface.And.Implementations—set的实现
- 约瑟夫问题
- 使用Nexus添加jar包到私服里
- 基本数据结构:循环单链表
- 假期计划和c++计划