如下错误:org.hibernate.LazyInitializationException: could not initialize proxy - no Session

原因是懒加载的问题,因为hibernate的机制是当我们查询一个对象的时候,在默认情况下,返回的只是该对象的普通属性,当用户去使用对象属性的时候,才会向数据库再一次查询,可以这时session已经关闭了,无法对数据库进行查询。

举例:在界面mainFrame.jsp中显示雇员所在的部门名称${loginuser.department.name }

解决方法:(强烈推荐方法三和方法四,如果是简单解决可以采用方法一,二)

方法一:修改对象关系文件,取消懒加载,在Department.hbm.xml中做如下修改:

<class name="Department" lazy="false" table="department">

方法二:显示初始化,在从数据库中获取Employee的地方,添加:

//select预先查询
Hibernate.initialize(employee.getDepartment());

总结:方法一和方法二,虽然简单,但是不管后面是否使用Department对象,都会向数据库发出sql语句。我们希望后面需要用Department的时候,才去查数据库,不使用的时候不查数据库。

方法三:spring专门提供了openSessionView来解决懒加载,也就是说扩大session的作用范围

不做处理前,session的作用范围,仅仅在service处调用开始,service处结束。可以使用过滤器,扩大session的作用范围,让他在整个过程都可以起作用

本质是使用过滤器来管理事务的开始和提交

在web-xml文件中做如下配置:

<!-- 配置openSessionView解决懒加载 -->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

总结:openSeesionView可以有效的解决懒加载问题,并保证需要对象属性时才查询数据库,但是会使得和数据库保持的session时间延长

最新文章

  1. 第二章 Odoo的安装与部署
  2. STL--STL和她的小伙伴们:
  3. linux软件安装(rpm,源码编译)
  4. 真机测试错误“The application could not be verified”
  5. 利用Java随机,生成随机学生数据
  6. cas-5.3.x接入REST登录认证,移动端登录解决方案
  7. 详解 IntelliJ IDEA 配置和启动maven 项目 步骤
  8. web安全测试--sql注入攻击
  9. Android平台下利用zxing实现二维码开发
  10. eclipse maven引入第三方jar包后如何下载源代码(sources)
  11. Spring Session Redis
  12. Eclipse自动生成方法注释 快捷键
  13. rnnlib依赖ubuntu环境配置
  14. Scala集合类详解
  15. 基于RBAC设计的通用权限管理框架
  16. 【spoj SUBST1】 New Distinct Substrings
  17. Kafka 0.7.2 单机环境搭建
  18. [Eth]网络查看命令:route
  19. Django REST Framework 学习笔记
  20. 网众远程修改ip、dns

热门文章

  1. object-c中实现特定一个或者多个页面横竖屏,其他界面保持竖屏显示。
  2. Html5 编程题
  3. 【NOIP模拟赛】一道挖掉背景的数学题
  4. Android 性能优化(12)网络优化( 8)Monitoring the Battery Level and Charging State
  5. Focusky的下载、安装、注册和使用(动画演示大师)
  6. Shell script之How to write
  7. Clickhouse DDL&amp;DML
  8. 搭建linux环境:如何在vmware安装linux虚拟机??
  9. 使用Way.EntityDB进行Entity Framework Core数据库建模
  10. vue之基础---组件基础