`
linjiacheng
  • 浏览: 70630 次
  • 性别: Icon_minigender_1
  • 来自: 中國
社区版块
存档分类
最新评论

Session was already closed

阅读更多
Session session = HibernateSessionFactory.getSession();
        try {
            HibernateSessionFactory.beginTransaction();
 
            session.save(user);
 
            HibernateSessionFactory.commitTransaction();
        } catch (HibernateException e) {
            HibernateSessionFactory.rollbackTransaction();
            log.error("", e);
        } finally {
            HibernateSessionFactory.closeSession();
        }

 如上所示的代码段,当运行到HibernateSessionFactory.closeSession();时,程序将报告Session was already closed 错误。

closeSession函数体如下所示

 

        Session session = (Session) threadLocal.get();
        threadLocal.set(null);
 
        if (session != null ) {
            session.close();
        }

 解决方法可以在session.close()之前多加一个判断条件,如下所示

 

        Session session = (Session) threadLocal.get();
        threadLocal.set(null);
 
        if (session != null && session.isOpen()) {
            session.close();
        }

 

至于为什么 我们没有关闭session而session会自动关闭,还有待于了解。我觉得可能是提交Transaction后Hibernate自动关闭了session。

HibernateSessionFactory.commitTransaction()函数体

         public static void commitTransaction(){
                   Transaction tx = (Transaction)txThreadLocal.get();
                   if(tx != null && !tx.wasCommitted() && !tx.wasRolledBack()){
                            tx.commit();
                            txThreadLocal.set(null);
                   }
         }

 


总之,在关闭session前 先来一个如下判断 session != null && session.isOpen()

分享到:
评论

相关推荐

    was集群session共享设置

    在was集群中,通常需要设置session共享,按照文档步骤可以完成session共享设置,解决你应用中的问题

    WAS session共享

    WAS中session共享设置,解决session复制问题

    session驱动类 session存入数据库

    session驱动类 session存入数据库 数据库存储session 用于session存入数据库

    Session渗透类

    使用代码可以直接做到window 7以上版本服务与桌面交互,服务调用消息窗口,调用程序等操作。

    自己实现的spring-session

    如果没有sessionId就新创建session,如果有sessionId,就去redis中查看是否有此id的记录,如果没有就新建session,如果有,还是新建session,并把redis中此session的相关数据赋值给新建的session,最后保存sessionId...

    SESSION购物车SESSION购物车SESSION购物车

    SESSION购物车SESSION购物车SESSION购物车SESSION购物车SESSION购物车SESSION购物车SESSION购物车

    js 销毁session,session

    js 销毁session,session js 销毁session,session

    C语言头文件 SESSION

    C语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言...

    session session session szsessdifn

    session 的应用对于处学ASP.NET的用户很有帮助.

    oracle_v$session_v$session_wait用途详解

    oracle_v$session_v$session_wait用途详解oracle_v$session_v$session_wait用途详解oracle_v$session_v$session_wait用途详解oracle_v$session_v$session_wait用途详解oracle_v$session_v$session_wait用途详解...

    spring session redis分布式session

    spring session redis分布式session,自定义session解决分布式session不同步问题

    WAS 常用配置截图

    WAS常用配置WAS常用配置WAS常用配置WAS常用配置WAS常用配置WAS常用配置WAS常用配置WAS常用配置WAS常用配置WAS常用配置

    微信小程序实现Session功能及无法获取session问题的解决方法

    因为小程序原生不支持Cookie,因此也不支持Session。 网上找到的的一些方法有缺陷,而且很多累赘,估计没有实际测试过,在此直接给出实测可用的代码。 大概思路就是借助小程序本地储存+网络请求的header可读可写来...

    处理session跨域几种方案

    else // if no session-data was found, { // create a new row @mysql_query("INSERT INTO ".self::db_table." ( session_id, session_expires, session_data) VALUES( '$sessID', '$newExp', ...

    tomcat修改sessionId

    tomcat修改sessionId,同一台服务器部署多个tomcat需要修改sessionId,否则会出现session冲突的问题

    Open_Session_In_View详解.doc

    因需要在service(or Dao)层里把session关闭,所以lazy loading 为true的话,要在应用层内把关系集合都初始化,如 company.getEmployees(),否则Hibernate抛session already closed Exception; Open Session In View...

    Session 失效的原因汇总及解决丢失办法

    昨天去GTSC面试,有面试官问我关于Session丢失之后怎么查的问题,说老实话,开发到现在很少碰到这样的情况,唯一想到的就是Session超时,还有就是做Session读写日志,发觉面试官听了之后不是很满意,汗! 不管怎么说...

    iframe 跨域访问session

    iframe 跨域访问session问题解决方法

    详解php设置session(过期、失效、有效期)

    在php中设置session有很多方面包有给... 这项设置提供给我们可以给session存放目录进行多级散列,其中“N”表示要设置的目录级数,后面的“/path”表示session文件存放的根目录路径,比如我们设置为下面的格式,代码

    WEB Session 分布式处理方案

    购物车分布式Session处理方案,一个用户的分布式的购物车在集群分布式的情况下怎么处理解决Session共享的问题

Global site tag (gtag.js) - Google Analytics