小弟有个问题请教各位。hibernate中的getCurrentSession()在项目中具体有什么用处?相对与过去的方法有什么优越性?

解决方案 »

  1.   

    嗯,主要是在事务这块的,需要在Hibernate的cfg文件中配置本地线程,保证登录后getCurrentSession()得到的是同一个Session,控制事务就方便多了。因为得到的都是同一个线程上的Session
      

  2.   

    getCurrentSession()得到当前线程的session而其不需要关闭。主要用于事务
      

  3.   

    去看看threadlocal吧。不然也说不清楚。
      

  4.   

    就是得到当前引用的session,
    如果一直用这个方法,能保证所有的session都是同一个,这样可以避免多session操作时,不同session中对象状态不一致等问题,而且节省很多数据库的连接开支。
    当然也有不好的地方,
    由于是同一个session,容易造成session在各个线程中的同步问题。
    也由于只有一个session,在request并发量很大的时候就效率会相对变低。
      

  5.   

    sessionFactory.getCurrentSession() 
    只要你持有SessionFactory,大可在任何时候、任何地点调用这个方法。getCurrentSession()方法总会返回“当前的”工作单元。
      

  6.   

    getCurrentSession()的功能要从ThreadLocal类说起,ThreadLocal是一个线程作用范围的对象,就是说保存在他中的对象的生命周期是一个线程,Spring调用该方法后会将打开的Session放入ThreadLocal中进行保存,然后通过getCurrentSession()方法返回保存的Session对象,这样在一次请求(一个线程)中调用getCurrentSession()就都会从ThreadLocal中取出保存的Session对象,这样就保障了一次请求(一个线程)中使用的都是同一个Session对象了,可以保障事务操作的特性,像数据一致性和数据安全性等。希望对楼主有帮助。