zoukankan      html  css  js  c++  java
  • openSession 与 getCurrentSession的区别

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

    package cn.kiwifly.view;
    
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.classic.Session;
    
    import cn.kiwifly.util.MySessionFactory;
    
    public class View {
    
    	public static void main(String[] args) {
    
    		Configuration configuration = new Configuration().configure();
    		SessionFactory sf = configuration.buildSessionFactory();
    		
    		Session sessionOpen1 = sf.openSession();
    		Session sessionOpen2 = sf.openSession();
    		
    		Session sessionThread1 = sf.getCurrentSession();
    		Session sessionThread2 = sf.getCurrentSession();
    		
    		System.out.println(sessionOpen1.hashCode() + "<-------->" + sessionOpen2.hashCode());
    		System.out.println(sessionThread1.hashCode() + "<-------->" + sessionThread2.hashCode());
    		
    
    	}
    
    }
    

    上面代码输出结果:

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


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

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

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

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


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

    openSession出来的session要通过:

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


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




  • 相关阅读:
    解决Chrome关联HTML文件,图标不显示的问题。
    Tomcat启动超时问题Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds
    matlalb 的后台运行方式
    新转移注意(caffe):ImportError: libcudart.so.7.0: cannot open shared object file: No such file or directory
    查看nvidia显卡命令
    train validation test
    lmdb数据格式
    github
    2016 hosts
    opencv3.0 imread问题
  • 原文地址:https://www.cnblogs.com/kiwifly/p/4435869.html
Copyright © 2011-2022 走看看