连接池没问题,template和session用的同一个sessionFactory

解决方案 »

  1.   

    load执行的时候并不会执行SQL语句,只是取得对对象的引用,当你调用object.getXXX()的时候才会执行SQL语句,而如果你执行object.getXXX()的时候,相应的SESSION已经被关闭了,就会出现如上的情况,getHibernateTemplate()就是这样的情况。
    像LZ这种情况,如果要用getHibernateTemplate,然后要在另外一个方法或者类里取得被返回对象的属性而不报这种异常,有着几种方法。
    1。如果是WEB应用,可以在web.xml里加入OpenSessionInView这个filter,这样的话每次请求都会帮你维护一个session对象而不关闭
    2。用Spring的HibernateInterceptor来作为拦截器,或者说代理,也会帮你在某个BEAN的方法执行开始创造一个SESSION。方法结束后关闭。
    3。如果你要里面的XX属性,建议在执行getHibernateTemplate().load()这个方法的方法里面直接运行一次object.getXX(),这样就会把东西取出来了。
       或者直接Hibernate.Initial(Object);
      

  2.   

    在load()时是不执行sql的?只有get时候才真正执行?
      

  3.   


    @Override
    public User load(final int id) {
    User u = this.hibernateTemplate.execute(new HibernateCallback<User>(){
    @Override
    public User doInHibernate(Session session)
    throws HibernateException, SQLException {
    User userTemp = (User)session.load(User.class, id);
    userTemp.getUsername();
    return userTemp;
    }
    });
    return u;
    }