关于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();
}
}

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

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧