分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

懒加载的解决方法(全)org.hibernate.LazyInitializationException: could not initialize proxy - no Session

发布时间:2023-09-06 01:21责任编辑:白小东关键词:暂无标签

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

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

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

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

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

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

方法二:不推荐。显示初始化,在获取Employee的地方,添加:

Hibernate.initialize(employee.getDept());

方法三:openSessionView,也就是说扩大session的作用范围(这种方法不适合引入spring的时候)

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

public class MyFilter1 extends HttpServlet implements Filter { ???public void doFilter(ServletRequest arg0, ServletResponse arg1, ???????????FilterChain arg2) throws IOException, ServletException { ???????Session session = null; ???????Transaction transaction = null; ???????try { ???????????session = HibernateUtil.getCurrentSession(); ???????????transaction = session.beginTransaction(); ???????????arg2.doFilter(arg0, arg1); ???????????// 这是在所有的请求往回返的时候,才会提交 ???????????transaction.commit(); ???????} catch (Exception e) { ???????????if (transaction != null) { ???????????????transaction.rollback(); ???????????} ???????????throw new RuntimeException(e.getMessage()); ???????}finally{ ???????????//不能使用常规的关闭 ???????????HibernateUtil.closeCurrentSession(); ???????????????????} ???} ???public void init(FilterConfig arg0) throws ServletException { ???????// TODO Auto-generated method stub ???}}

方法四:

懒加载的解决方法(全)org.hibernate.LazyInitializationException: could not initialize proxy - no Session

原文地址:http://www.cnblogs.com/sunnyCx/p/7765366.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved