getCurrentSession与openSession的区别
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的区别相关推荐
- getCurrentSession()与openSession()的区别?
1.getCurrentSession()与openSession()的区别? 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession(),创建 ...
- hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别
1 getCurrentSession创建的session会和绑定到当前线程,而openSession不会. 2 getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而ope ...
- SessionFactory.getCurrentSession与openSession的区别
SessionFactory.getCurrentSession与openSession的区别 1. 如果使用的是getCurrentSession来创建session的话,在commit后,sess ...
- Hibernate getCurrentSession()和openSession()的区别
通过getCurrentSession()创建的Session会绑定到当前线程上:openSession()不会. 通过getCurrentSession()获取Session,首先是从当前上下文中寻 ...
- Sessionfactory.getCurrentSession与 openSession() 的区别
1. getCurrentSession创建的session会和绑定到当前线程,而openSession不会. 2. getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而o ...
- sessionFactory.getCurrent()和sessionFactory.openSession()的区别
sessionFactory.getCurrentSession()可以完成一系列的工作,当调用时, hibernate将session绑定到当前线程,事务结束后,hibernate 将session ...
- Java程序员从笨鸟到菜鸟之(五十二)细谈Hibernate(三)Hibernate常用API详解及源码分析--csdn 曹胜欢...
新接触一个框架的目的就是想利用这个框架来为我们做一些工作,或者是让他来简化我们的工作,利用这个框架无非就是要利用这个框架所给我们提供的API去操作我们的数据,所以利用一个框架的好坏很大一部分取决于你对 ...
- 通向架构师的道路(第七天)之漫谈使用ThreadLocal改进你的层次的划分
一.什么是ThreadLocal 早在JDK 1.2的版本中就提供Java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简 ...
- Hibernate面试题分析
Hibernate面试题分析 1. Hibernate 的检索方式有哪些 ? ① 导航对象图检索 ② OID检索 ③ HQL检索 ④ QBC检索 ⑤ 本地SQL检索 2. 在 Hibernat ...
- atitit.spring hibernate的事务机制 spring不能保存对象的解决
atitit.spring hibernate的事务机制 spring不能保存对象的解决 sessionFactory.openSession() 不能..log黑头马sql语言.. sessionF ...
最新文章
- 深入解析Spring架构与设计原理-AOP
- ZOJ4118 Stones in the Bucket
- Redis 过期键删除策略、内存淘汰机制
- 前端vue实现pdf文件的在线预览
- c语言++数组名【数字】_C ++程序在数组中打印所有非重复数字
- 全国计算机英语四六级准考证打印准考证号,2017全国大学生英语四六级准考证打印...
- java编程xml_XML Java编程
- 标准模板库(STL)之 queue 列传
- 使用slf4j和log4j记录日志
- 数据格式转换 (三)Office文档转HTML
- Android Studio NDK开发
- OpenG的特点及功能
- INT 15h系列介绍
- e.g., malformed request syntax, invalid request message framing, or deceptive request routing)
- html 圆环实现多种颜色,Echart饼图实现(圆环图)+状态颜色控制
- iPhone开发网站、论坛、博客 .
- php disconf,未主/disconf
- 通用汽车新战略:“逃离”汽车制造,能否冲破“围城”之困
- 初步了解jquery mobile
- IE卫士v1.02 --- 一款完全免费的IE修复工具