你在sessionFactory中session放在TreadLocal中的
所以你session.close不能用
用sessionFactory中关闭session方法

解决方案 »

  1.   

    SESSION BEAN是CONTAINER MANAGED
    SESSION FACTORY通过JNDI TREE绑定,程序中查找改OBJECT,然后创建SESSION
    你的意思是不是在一次transaction中,session只能被close一次?我close了,他不会自己自动打开?
    象我这种分布式环境中,应该使用sessionFactoery.openSession()?
      

  2.   

    很明显嘛,你第一次的时候就已经把session给close了,第二次怎么可能仍然存在呢。你的close相当于把数据库连接关掉了,这和是否是分布式没关系。session的生命周期由hibernate来管理的,session的打开和关闭,你不需要关心。
      

  3.   

    恩,晓得了。我如果需要这样使用需要在外部控制SESSION OPEN或者,每次使用都OPENSESSION
    想了解一下,session的创建代价大不大?如果很多用户并发使用的花,系统一下子会开很多个SESSION,这时候消耗资源是不是会比直接使用sql在dao里面的那种方法大很多
      

  4.   

    不太清楚你的意思。直接使用sql就不创建数据库连接了吗?这和创建一个session有什么区别呢?
      

  5.   

    呵呵,强烈推荐你看看hibernate基本知识,session是轻量级对象,不影响性能。
    sessionFactory是大对象。