关于hibernateSessionFactory中的closeSession()存在疑问

CodeDog3 2017-07-01 01:40:50
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();

threadLocal.set(null);//我的理解是这里把本地线程清空了,也就是把所有的session复制为null

if (session != null) {//为什么这里要判断不为空才.close呢?
session.close();
}
}

我的理解肯定出错了,但是不知道错在哪,请各位大神麻烦帮我指正一下,感激!
...全文
243 3 点赞 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
tianfang 2017-07-03
threadLocal 是线程的全局变量 先从其中获得session,是复制了一个; 清除的是数据,不是线程 session判断非空,是为了避免异常,标准写法
  • 打赏
  • 举报
回复
CodeDog3 2017-07-01
求助!求助!求助!求助!
  • 打赏
  • 举报
回复
晨曦遇晓 2017-07-01
我们用的是mybatis,但从你这段代码来看的话,这明显的是对对象做非空判断的,这是一种安全机制,如果按照你所说的,把本地线程清空了,也就是把所有的session复制为null 那么session这个对象如果都已经是null的话,那么调用close的话就100%会报nullpointexception 空指针异常 所以一般用完了数据连接池或者会话之后,都会进行关闭操作的
  • 打赏
  • 举报
回复
相关推荐
发帖
Java EE
创建于2007-09-28

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2017-07-01 01:40
社区公告
暂无公告