通过TransactionProxyFactoryBean来声明事务,在target属性对应的类中的Session是否由spring能够自动关闭 Java代码 
public String getUserId(String strUserid) throws DataAccessException,   
           java.sql.SQLException {   
  
       Session session = this.getSession();   
       Connection conn = session.connection();   
       Statement smt = conn.createStatement();   
       ResultSet rs;   
  
       String query = "select id from login where loginid='" + strUserid + "'";   
       rs = smt.executeQuery(query);   
       rs.next();   
  
       String id = rs.getString("id");   
  
       smt.close();   
       rs.close();   
       conn.close();   
       session.close();   
       return id;   
   }  

解决方案 »

  1.   

    楼主看看这个文章:
    http://hi.baidu.com/yaolihui/blog/item/e26a26d87feee23032fa1c52.html
    用spring控制hibernate的session何时关闭!
      

  2.   

    有spring参与的,确实是由它管理session;
    一般自己的代码中不能出现,也没必要出现自己去得到session
    等等操作。
    具体的你按一楼说的去看看那篇文章
      

  3.   

    在非OpenSessionInView模式下也是这样的吗
      

  4.   

    如果使用了OpenSessionInView模式,那么Spring会帮助你管理Session的开和关,从而你在你的DAO中通过HibernateDaoSupport拿到的getSession()方法,都是绑定到当前线程的线程安全的Session,即拿即用,最后会由Filter统一关闭。
      

  5.   

    在没有使用Spring提供的Open Session In View情况下,因需要在service(or Dao)层里把session关闭,所以lazy loading 为true的话,要在应用层内把关系集合都初始化,如 company.getEmployees(),否则Hibernate抛session already closed Exception.