hibernate中opensession和getCurrentSession的区别

来源:互联网 发布:算命软件哪个最准最全 编辑:程序博客网 时间:2024/05/17 07:30

1、openSession 每一次获得的是一个全新的session对象,而getCurrentSession获得的是与当前线程绑定的session对象

  1. package cn.kiwifly.view;  
  2.   
  3. import org.hibernate.SessionFactory;  
  4. import org.hibernate.cfg.Configuration;  
  5. import org.hibernate.classic.Session;  
  6.   
  7. import cn.kiwifly.util.MySessionFactory;  
  8.   
  9. public class View {  
  10.   
  11.     public static void main(String[] args) {  
  12.   
  13.         Configuration configuration = new Configuration().configure();  
  14.         SessionFactory sf = configuration.buildSessionFactory();  
  15.           
  16.         Session sessionOpen1 = sf.openSession();  
  17.         Session sessionOpen2 = sf.openSession();  
  18.           
  19.         Session sessionThread1 = sf.getCurrentSession();  
  20.         Session sessionThread2 = sf.getCurrentSession();  
  21.           
  22.         System.out.println(sessionOpen1.hashCode() + "<-------->" + sessionOpen2.hashCode());  
  23.         System.out.println(sessionThread1.hashCode() + "<-------->" + sessionThread2.hashCode());  
  24.           
  25.   
  26.     }  
  27.   
  28. }  

上面代码输出结果:

546579839<-------->1579795854
141106670<-------->141106670


2、openSession不需要配置,而getCurrentSession需要配置

1中代码如果直接运行会报错,要在hibernate.cfg.xml中加入如下代码才行

  1. <property name="current_session_context_class">thread</property>  

这里我们是让session与当前线程绑定,这里的线程范围应该是一次浏览器的会话过程,也就是说打开网站和关闭浏览器这个时间段。


3、openSession需要手动关闭,而getCurrentSession系统自动关闭

openSession出来的session要通过:

  1. session.close();  
而getSessionCurrent出来的session系统自动关闭,如果自己关闭会报错


4、Session是线程不同步的,要保证线程安全就要使用getCurrentSession

-----------------------------------------------------------------------------------------------------

目前获取Session的时候存在两种方式,openSession和getCurrentSession,如下:

[java] view plain copy
 print?
  1. <span style="white-space:pre">    </span>Configuration config = new Configuration();  
  2.     SessionFactory sessionFactory = config.buildSessionFactory();  
  3.     //方式一  
  4.     Session session1 = sessionFactory.openSession();  
  5.     //方式二  
  6.     Session session2 = sessionFactory.getCurrentSession();  
两种方法的区别如下:

(1)openSession每次打开都是新的Session,所以多次获取的Session实例是不同的,并且需要人为的调用close方法进行Session关闭。

(2)getCurrentSession是从当前上下文中获取Session并且会绑定到当前线程,第一次调用时会创建一个Session实例,如果该Session未关闭,后续多次获取的是同一个Session实例;事务提交或者回滚时会自动关闭Sesison,无需人工关闭。

使用getCurrentSession时,需要在配置文件中添加如下:

(1)如果使用的是本地事务(JDBC事务)

[html] view plain copy
 print?
  1. <property name="current_session_context_class">thread</property>  
(2)如果使用的是全局事务(JTA事务)

[html] view plain copy
 print?
  1. <property name="current_session_context_class">jta</property>  

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 儿子你快点搞你爸要回来吗 儿子快点你爸回来了嗯 儿子你搞快点你爸要回来啦文字 快点你爸马上就回来了视频 儿子你搞快点你爸要回来啦电影 儿子快拿出来你爸快回来了视频 儿子你要高就快点你爸回来了电影 儿子你要就快点你爸要回来了小说 儿子 快点妈要来了漫画 你快点啊你爸快回来了视频 儿子快点你爸快回来了在哪能看 儿子搞快点你爸要回来了短文 儿子你快停下你爸要醒了视频 儿子用点力妈 儿子深一点用点力阅读 你要搞就快点你爸快回来了视频 试衣间深一点用点力视频 儿子深一点用点力阅读张研 儿子你用点力全文阅读 啊快一点啊用点力啊视频 儿子再用点力妈要飞了视频 中国真实的母教子视频 四川单亲妈教子性知识 52岁全程落脸视频 我尝到了母爱的滋味开头 我尝到了母爱的滋味txt 我尝到了母爱的甜蜜400 真实母教子视频 我尝到了母亲的滋味400 我尝到了母爱的滋味450 单亲家庭母教子 啊儿子深点妈要来了中文字 美国真实的母教子视频 儿子别 停妈还要中文字 尝到了母爱的滋味400 让儿子尝试了一次中文字 我尝到了母爱的滋味40 我尝到了母爱的滋味400小说下载 好胀胀死妈了乖乖儿子中文字 我尝到了母爱的滋味300 儿子别射J去妈会怀孕视频中文