SessionFactory.getCurrentSession与openSession的区别
1. 如果使用的是getCurrentSession来创建session的话,在commit后,session就自动被关闭了,
也就是不用再session.close()了。但是如果使用的是openSession方法创建的session的话,
那么必须显示的关闭session,也就是调用session.close()方法。这样commit后,session并没有关闭
2. getCurrentSession的使用可以参见hibernate\hibernate-3.2\doc\tutorial\src项目
3. 使用SessionFactory.getCurrentSession()需要在hibernate.cfg.xml中如下配置:
* 如果采用jdbc独立引用程序配置如下:
<property name="hibernate.current_session_context_class">thread</property>
* 如果采用了JTA事务配置如下
<property name="hibernate.current_session_context_class">jta</property>

利于ThreadLocal模式管理Session
早在Java1.2推出之时,Java平台中就引入了一个新的支持:java.lang.ThreadLocal,给我们在编写多线程程序
时提供了一种新的选择。ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,
而是thread local variable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量(ThreadLocal)
其实的功用非常简单,就是为每一个使用某变量的线程都提供一个该变量值的副本,是每一个线程都可以独立地改变自己的副本,
而不会和其它线程的副本冲突。从线程的角度看,就好像每一个线程都完全拥有一个该变量。
ThreadLocal是如何做到为每一个线程维护变量的副本的呢?其实实现的思路很简单,在ThreadLocal类中有一个Map,
用于存储每一个线程的变量的副本。比如下面的示例实现(为了简单,没有考虑集合的泛型):
public class HibernateUtil {

public static final ThreadLocal session =new ThreadLocal();

public static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}

public static Session currentSession() throws HibernateException {
Session s = session.get();
if(s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}

public static void closeSession() throws HibernateException {
Session s = session.get();
if(s != null) {
s.close();
}
session.set(null);
}
}

SessionFactory.getCurrentSession与openSession的区别相关推荐

  1. Sessionfactory.getCurrentSession与 openSession() 的区别

    1. getCurrentSession创建的session会和绑定到当前线程,而openSession不会. 2. getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而o ...

  2. hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别

    1 getCurrentSession创建的session会和绑定到当前线程,而openSession不会. 2 getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而ope ...

  3. getCurrentSession()与openSession()的区别?

    1.getCurrentSession()与openSession()的区别? 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession(),创建 ...

  4. Hibernate getCurrentSession()和openSession()的区别

    通过getCurrentSession()创建的Session会绑定到当前线程上:openSession()不会. 通过getCurrentSession()获取Session,首先是从当前上下文中寻 ...

  5. sessionFactory.getCurrent()和sessionFactory.openSession()的区别

    sessionFactory.getCurrentSession()可以完成一系列的工作,当调用时, hibernate将session绑定到当前线程,事务结束后,hibernate 将session ...

  6. 新Hibernate SessionFactory().getCurrentSession()猫腻

    http://liusu.iteye.com/blog/380397 今天要用Hibernate做点实验,下载最新版得下来.解压,建项目,从tutorial copy代码.Tutorial里面提到说最 ...

  7. Java程序员从笨鸟到菜鸟之(五十二)细谈Hibernate(三)Hibernate常用API详解及源码分析--csdn 曹胜欢...

    新接触一个框架的目的就是想利用这个框架来为我们做一些工作,或者是让他来简化我们的工作,利用这个框架无非就是要利用这个框架所给我们提供的API去操作我们的数据,所以利用一个框架的好坏很大一部分取决于你对 ...

  8. 通向架构师的道路(第七天)之漫谈使用ThreadLocal改进你的层次的划分

    一.什么是ThreadLocal 早在JDK 1.2的版本中就提供Java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简 ...

  9. Hibernate面试题分析

    Hibernate面试题分析 1. Hibernate 的检索方式有哪些 ? ① 导航对象图检索  ② OID检索  ③ HQL检索  ④ QBC检索  ⑤ 本地SQL检索 2. 在 Hibernat ...

最新文章

  1. 产品经理在跨部门沟通中常见问题和解决办法[转自UCDChina]
  2. 20145207 《Java程序设计》第5周学习总结
  3. 虚指针的用法(原出处//http://blog.csdn.net/haoel/article/details/1948051)
  4. Docker swarm - 使用体验 1+2
  5. 【Linux】一步一步学Linux——uname命令(72)
  6. mysql磁盘临时表清理_mysql 创建大量磁盘临时表
  7. Posix线程编程指南(4) 线程终止
  8. LeetCode(893)——特殊等价字符串组(JavaScript)
  9. 缺少网卡固件导致的网络服务异常,Can‘t load firmware file bnx2x/bnx2x-e2-7.13.15.0.fw
  10. Linux设置免密登录
  11. 云呐-动环监控巡检表,信息机房巡检表
  12. 我用10张图总结出了这份并发编程最佳学习路线!!(建议收藏)
  13. 深度解析国内O2O模式
  14. python实现图片切割和合并
  15. 温暖的奢侈,当手机遇到机器人
  16. Mdoi R2 洛谷4月月赛I
  17. 手把手教你做树莓派魔镜-MagicMirror(七)-接下来
  18. 数据库字段类型CHAR和INT
  19. Bluetooth设备之间如何建立连接
  20. 在Linux系统上运行.net core程序

热门文章

  1. 甜甜圈行业调研报告 - 市场现状分析与发展前景预测
  2. 微软原版软件下载链接集合
  3. RFIC(AD9361)助力无线通信
  4. Linux虚拟机配置桥接模式
  5. StarCCM+的jar包路径
  6. Bootstrap 网页乱码
  7. IaaS、PaaS、SaaS三者的概念
  8. 2020,懂得自己的平凡 | 年度总结
  9. 函数的四大特性【概念向 + 图片解释】
  10. 手机看图app android小众,保证你用到停不下来的8款APP