Hibernate框架中利用Configuration对象的buildSessionFactory()可以得到一个SessionFactory的对象,顾名思义SessionFactory就是产生Session对象的工厂,而它产生Session的方法有两种:

1.openSession();

2.getCurrentSesion()

由于在很多面试题中有考察到这个知识点,所以我总结了一下这两种产生Session方法的区别。

区别1.openSession()方法无论在上下文中有没有Session存在都会建一个新的Session,而getCurrentSession()方法会检测在上下文环境中是否有Session存在,如果有,则拿到这个Session;如果没有则创建一个新的Session。

区别2.openSession()方法创建的Session在最后必须调用close()方法,而getCurrentSession()方法创建的Session在调用commit()方法后无需再调用close()方法(最好不要调用,会产生不必要的错误)。

区别3.getCurrentSession()方法的用途是界定事物边界。

Ps:在一次测试中发现当先调用openSession()方法产生Session后,再调用getCurrentSession()方法得到的并不是之前产生的那个Session,而是一个新的Session。

解释一下上面所提到的上下文,这里所说的上下文是在hibernate.cfg.xml中指定的,其中有两个常用的取值,分别是thread和jta。这两者的区别在于thread适用于单Connection,他的事物由数据库连接Connection管理;而jta适用于多Connection(跨数据库)的分布式程序(当然单Connection也可以),他的事物由application server提供的专门的事物管理器来管理。

转载于:https://blog.51cto.com/a001807/1890613

getCurrentSession与openSession的区别相关推荐

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

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

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

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

  3. SessionFactory.getCurrentSession与openSession的区别

    SessionFactory.getCurrentSession与openSession的区别 1. 如果使用的是getCurrentSession来创建session的话,在commit后,sess ...

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

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

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

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

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

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

  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 ...

  10. atitit.spring hibernate的事务机制 spring不能保存对象的解决

    atitit.spring hibernate的事务机制 spring不能保存对象的解决 sessionFactory.openSession() 不能..log黑头马sql语言.. sessionF ...

最新文章

  1. 深入解析Spring架构与设计原理-AOP
  2. ZOJ4118 Stones in the Bucket
  3. Redis 过期键删除策略、内存淘汰机制
  4. 前端vue实现pdf文件的在线预览
  5. c语言++数组名【数字】_C ++程序在数组中打印所有非重复数字
  6. 全国计算机英语四六级准考证打印准考证号,2017全国大学生英语四六级准考证打印...
  7. java编程xml_XML Java编程
  8. 标准模板库(STL)之 queue 列传
  9. 使用slf4j和log4j记录日志
  10. 数据格式转换 (三)Office文档转HTML
  11. Android Studio NDK开发
  12. OpenG的特点及功能
  13. INT 15h系列介绍
  14. e.g., malformed request syntax, invalid request message framing, or deceptive request routing)
  15. html 圆环实现多种颜色,Echart饼图实现(圆环图)+状态颜色控制
  16. iPhone开发网站、论坛、博客 .
  17. php disconf,未主/disconf
  18. 通用汽车新战略:“逃离”汽车制造,能否冲破“围城”之困
  19. 初步了解jquery mobile
  20. IE卫士v1.02 --- 一款完全免费的IE修复工具

热门文章

  1. yii和php的一些细节
  2. Polyverse Infected Mushroom Bundle Mac(声音处理器插件包)
  3. CentOS7 安装部署k8s
  4. 【Flutter】微信项目实战【07】 通讯录界面搭建(下)
  5. iOS获取手机卡IMSI信息
  6. linux 下ifconfig修改IP
  7. 使用火狐解决网站图片不能复制下载的问题
  8. [Music]乡村摇滚:Any man of mine
  9. C#多线程学习笔记(三)
  10. Illustrator 教程,如何在 Illustrator 中重新塑造文本?