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共享,按照文档步骤可以完成session共享设置,解决你应用中的问题
WAS中session共享设置,解决session复制问题
session驱动类 session存入数据库 数据库存储session 用于session存入数据库
使用代码可以直接做到window 7以上版本服务与桌面交互,服务调用消息窗口,调用程序等操作。
如果没有sessionId就新创建session,如果有sessionId,就去redis中查看是否有此id的记录,如果没有就新建session,如果有,还是新建session,并把redis中此session的相关数据赋值给新建的session,最后保存sessionId...
SESSION购物车SESSION购物车SESSION购物车SESSION购物车SESSION购物车SESSION购物车SESSION购物车
js 销毁session,session js 销毁session,session
C语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言头文件 SESSIONC语言...
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用途详解...
spring session redis分布式session,自定义session解决分布式session不同步问题
WAS常用配置WAS常用配置WAS常用配置WAS常用配置WAS常用配置WAS常用配置WAS常用配置WAS常用配置WAS常用配置WAS常用配置
因为小程序原生不支持Cookie,因此也不支持Session。 网上找到的的一些方法有缺陷,而且很多累赘,估计没有实际测试过,在此直接给出实测可用的代码。 大概思路就是借助小程序本地储存+网络请求的header可读可写来...
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,否则会出现session冲突的问题
因需要在service(or Dao)层里把session关闭,所以lazy loading 为true的话,要在应用层内把关系集合都初始化,如 company.getEmployees(),否则Hibernate抛session already closed Exception; Open Session In View...
昨天去GTSC面试,有面试官问我关于Session丢失之后怎么查的问题,说老实话,开发到现在很少碰到这样的情况,唯一想到的就是Session超时,还有就是做Session读写日志,发觉面试官听了之后不是很满意,汗! 不管怎么说...
iframe 跨域访问session问题解决方法
在php中设置session有很多方面包有给... 这项设置提供给我们可以给session存放目录进行多级散列,其中“N”表示要设置的目录级数,后面的“/path”表示session文件存放的根目录路径,比如我们设置为下面的格式,代码
购物车分布式Session处理方案,一个用户的分布式的购物车在集群分布式的情况下怎么处理解决Session共享的问题