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

如下错误: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
    }
}

方法四:

时间: 2024-10-13 01:40:01

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

懒加载异常org.hibernate.LazyInitializationException: could not initialize proxy - no Session

错误页面提示 could not initialize proxy - no Session 控制台 org.hibernate.LazyInitializationException: could not initialize proxy - no Session 病症:这是一个lazy使用后的Exception,使用迟时加载,在session(hibernate里的session),关闭后使用该对象的未加载变量,也就是说session已经关闭,没有保存到内存中,然后你使用了,导致该异常. Q

【bug记录】jpa 解决org.hibernate.lazyinitializationexception could not initialize proxy - no session

前言 最近开发项目比较忙,springcloud的笔记得稍稍放放了,下午出来个bug,恶心的不行,功能很简单,也没有什么级联或复杂的映射关系,就是一直在报三个异常 Caused by: com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no propert

懒加载异常 处理方法

首先看一下什么是懒加载: 所谓懒加载(lazy)就是延时加载,延迟加载. 什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载. 至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适, 因为内存容量有限 ,为了减少并发量,减少系统资源的消耗, 我们让数据在需要的时候才进行加载,这时我们就用到了懒加载. 比如部门ENTITY和员工ENTITY,部门与员工1对多,如果lazy设置为 false,那么只要加载了一个部门的po,就会根据一对多配置的关系把所有员工的po也加载出来

iOS开发UI中懒加载的使用方法

1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其getter方法.说的通俗一点,就是在开发中,当程序中需要利用的资源时.在程序启动的时候不加载资源,只有在运行当需要一些资源时,再去加载这些资源. 我们知道iOS设备的内存有限,如果在程序在启动后就一次性加载将来会用到的所有资源,那么就有可能会耗尽iOS设备的内存.这些资源例如大量数据,图片,音频等等,所以我们在使用懒加载的时候一定要注意先判断是否已经有了,如果没有那么再去进行实例化 2.使

js懒加载异步操作解决办法

ajax分页请求后台数据事先定义一个number var number = 0; var getBonusPointsList = function(id,num,key,sign){ var data2 = { userId:id, number:num, accessKeyId:key, sign:sign }; data2 = JSON.stringify(data2); $.ajax({ url:'http://192.168.1.161:8080/user/getBonusPoints

vue-router路由懒加载(解决vue项目首次加载慢)

懒加载:----------------------------------------------------? 也叫延迟加载,即在需要的时候进行加载,随用随载. 为什么需要懒加载? 像vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多,时间过长,会出啊先长时间的白屏,即使做了loading也是不利于用户体验,而运用懒加载则可以将页面进行划分,需要的时候加载页面,可以有效的分担首页所承担的加载压力,减少首页加载用时 简单的说

CAD2014以上版本不信任加载项解决方法

前一段时间做CAD插件支持版本升级遇到了一个很棘手的问题,CAD2014以上版本增加了受信任功能,每次用程序启动CAD并加载arx文件时都弹出对话框询问是否加载 我的解决方法如下:(仅供参考) 读取注册表(位置根据版本位置各自对应): HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R19.1\ACAD-D001:804\Profiles 其 “默认” 所对应的字段就是用使用的当前配置名,如下图所示: 读取当前配置项 HKEY_CURRENT_USER\S

dll注册加载失败解决方法

当输入命令regsvr32 A.dll注册时,跳出下面错误提示: 模块C:\windows\System32\A.dll加载失败. 请确保该二进制存储在指定的路径中,或者调试它检查该二进制或相关的 .DLL文件是否有问题 查了很多资料,总而言之是64位系统的system32与syswow64的混淆原因,解决方法就是到syswow64目录下使用regsvr32 命令.但我根据这种解决方法,还是不能解决问题. 这里感谢老师提醒,在次与大家分享. B.dll的生成引用了A.dll,在注册B.dll时出

editor多功能文本框在有些计算机上不能正常加载,解决方法,本人用的是把js调用方法放到&lt;body&gt;&lt;/body&gt;后面)

IE8 中"HTML Parsing Error:Unable to modify the parent container element before the child element is closed"错误 一. 又涨见识了 IE8报下面错误,而且是我的机器不报,同事的机器报,试了4台,两个报,两个不报,IE版本都一样,没想明白 解决: 1.查看是否有未关闭的html标签,比如<table>而没有</table> (我就是这个原因) 2.是否在页面未加