getCurrentSession 与 openSession区别
getCurrentSession () 使用当前的session
openSession()重新建立一个新的session
使用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>
Session session = HibernateUnit.getSessionFactory().getCurrentSession(); session.beginTransaction(); .... session.getTransaction().commit();
使用openSession()不需要配置如上的hibernate.cfg.xml配置
代码如下:
Session session=HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
.......
transaction.commit();
session.close();
j
结论:在一个应用程序中,如果DAO 层使用Spring 的hibernate 模板,通过Spring 来控制session 的生命周期,则首选getCurrentSession ()
如果使用的是getCurrentSession来创建session的话,在commit后,session就自动被关闭了,不用再session.close()了。
但是如果使用的是openSession方法创建的session的话,那么必须显示的关闭session,也就是调用session.close()方法。这样commit后,session并没有关闭
getcurrentSession()的Session 在第一次被使用的时候,即第一次调用getCurrentSession()的时候,其生命周期就开始。
然后她被Hibernate绑定到当前线程。当事物结束的时候,不管是提交还是回滚,Hibernate会自动把Session从当前线程剥离,并且关闭。
若在次调用 getCurrentSession(),会得到一个新的Session,并且开始一个新的工作单元。
getCurrentSession 与 openSession区别的更多相关文章
- hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别
1 getCurrentSession创建的session会和绑定到当前线程,而openSession不会. 2 getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而ope ...
- Hibernate getCurrentSession()和openSession()的区别
通过getCurrentSession()创建的Session会绑定到当前线程上:openSession()不会. 通过getCurrentSession()获取Session,首先是从当前上下文中寻 ...
- 关于hibernate中的session与数据库连接关系以及getCurrentSession 与 openSession() 的区别
1.session与connection,是多对一关系,每个session都有一个与之对应的connection,一个connection不同时刻可以供多个session使用. 2.多个sessi ...
- getCurrentSession 与 openSession() 的区别
1 getCurrentSession创建的session会和绑定到当前线程,而openSession不会. 2 getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而ope ...
- Hibernate常见接口说明
(一)SessionFactory 1. getCurrentSession()和openSession()区别 getCurrentSession创建的session会和绑定到当前线程,而openS ...
- Hibernate最全面试题
Hibernate常见面试题 Hibernate工作原理及为什么要用? Hibernate工作原理及为什么要用? 读取并解析配置文件 读取并解析映射信息,创建SessionFactory 打开Sess ...
- Java面试前需要了解的东西
一.前言 只有光头才能变强 回顾前面: 广州三本找Java实习经历 上一篇写了自己面试的经历和一些在面试的时候遇到的题目(笔试题和面试题). 我在面试前针对Java基础也花了不少的时间,期间也将自己写 ...
- java初中级面试题(最新版)
Java基础方面: 概念 1.什么是面向对象? 万物皆对象,把现实中有共同特性行为的对象抽象成类,类是程序中最基本的单位. 2.类和对象 面向对象的思想是如何在java展现的呢? 就是通过类和对象 * ...
- hibernate中openSession()跟getCurrentSession()方法之间的区别
Hibernate openSession() 和 getCurrentSession的区别 getHiberanteTemplate .getCurrentSession和OpenSession 采 ...
随机推荐
- 如何获得带转义的json内容
stringify两次 JSON.stringify(JSON.stringify(obj))
- IntelliTrace调试
当您进行调试时,IntelliTrace 将在后台收集有关托管应用程序的数据,其中包括来自许多框架组件(例如 ADO.NET.ASP.NET 和 System.XML)的信息.这些 IntelliTr ...
- NOIP2017 D1T1 小凯的疑惑
洛谷P3951 看到题目,很容易想到这一题是求使ax+by=c(a,b,c∈N)无非负整数解的最大c 由裴蜀定理可知方程一定有整数解(a,b互素,gcd(a,b)=1|c) 解法一:暴力枚举 看到题目 ...
- Python---进阶---Tkinter---game
一.用tkinter写一个小游戏,来随机生成我们需要的名字 # 用tkinter写一个小游戏,来随机生成我们需要的名字 import tkinter as tkimport random window ...
- js的字符串是数字时过长的时候会被截断
JavaScript能表示并进行精确算术运算的整数范围为:正负2的53次方,也即从最小值-9007199254740992到最大值+9007199254740992之间的范围:对于超过这个范围的整数, ...
- 数组Array方法: indexOf、filter、forEach、map、reduce使用实例
- mysql Alias操作符 语法
mysql Alias操作符 语法 作用:为列名称和表名称指定别名 大理石构件 语法:SELECT column_name(s) FROM table_name AS alias_name mysql ...
- R 配色(挑花眼的色卡19色)
cols =c("#999999","#FF0099", "#E69F00", "#56B4E9", "#00 ...
- 【gym102222K】Vertex Covers(高维前缀和,meet in the middle)
题意:给定一张n点m边的图,点带点权,定义点覆盖的权值为点权之积,问所有点覆盖的权值之和膜q n<=36, 1<=a[i]<=1e9,1e8<=q<=1e9 思路:n&l ...
- Improving Network Management with Software Defined Networking
Name of article:Improving Network Management with Software Defined Networking Origin of the article ...