另:可以设定HibernateTemplate的AllowCreate为True,并在finally中关闭Session。也可以将true作为参数传递到super.getSession(..)方法中取得Session。这样也可以,就是麻烦点。
参见:
http://springframework.org/docs/api/org/springframework/orm/hibernate3/HibernateTemplate.html
http://www.mxjava.com/blog/article.asp?id=246
参考资料:http://blog.sina.com.cn/s/blog_50e4caf70100a1nx.html于是,如果我们一定要书写hql语句可以参考如下形式
public PageUtil getLog(final Long userid,final Integer page) {
                String counthql="select count(mod) from Blog mod where mod.userinfo.userid=?";
                Integer count=(Integer)getHibernateTemplate().find(counthql, userid).get(0);
                final PageUtil pu=new PageUtil();// 分页包装类
                pu.setCount(count);
                pu.setPage(page);                
                pu.setMaxPagesbyCount(count);                
                List li= getHibernateTemplate().executeFind(new HibernateCallback(){
                        public Object doInHibernate(Session session) throws HibernateException, SQLException {
                                String hql="from Blog mod left join fetch mod.userinfo where mod.userinfo.userid=? order by mod.logid desc";
                                Query query=session.createQuery(hql);
                                query.setParameter(0, userid);
                                query.setMaxResults(pu.getMaxResults());
                                query.setFirstResult(pu.getFirstResult());        
                                return query.list();
                        }                        
                });                
                pu.setResults(li);
                return pu ;
        }只有这样做了以后才能确保数据库的连接能够尽早被释放,项目不至于崩溃。