hibernate DAO中关于session的管理

最近在整理hibernate的性能优化时,碰到了session的问题。
有几个问题不解,想在此请教一下各位高手们。
1、hibernate官网中介绍了一种threadlocal模式对session进行管理,本人也在filter中设置了这种功能,的确自己创建的session确实达到了与线程绑定的功能,但是对于DAO这一层(与SPRING整合)在使用getHibernateTemplate的回调函数中的session却无法达到该目的,也即getHibernateTemplate每次都创建了一个新的session,具体代码如下:
fruitDAO.getHibernateTemplate().execute(new HibernateCallback(){
public Object doInHibernate(Session session){
System.out.println(session.hashCode());
return null;
}
});
每次打出来的hashCode都不一样。

2、hibernate对于频繁创建关闭session的代价到底有多少,在系统中配置了连接池,session在关闭时是否对hibernate的数据库连接有影响。

谢谢各位了。

hibernate的session就跟jdbc的Connection是类似的意思

如果是和spring整合的话,那就应该用OpenSessionInViewFilter是Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开Hibernate的Session

[quote]getHibernateTemplate每次都创建了一个新的session[/quote]
其实并没有创建一个新的session,这里应该使用了proxy,
其中用的是createSessionProxy(session)中返回的session。但是是根据原有session创建的,具体查看createSessionProxy(session)方法

[quote]hibernate对于频繁创建关闭session的代价到底有多少, [/quote]
这个是要看连接池的性能了。

[quote]在系统中配置了连接池,session在关闭时是否对hibernate的数据库连接有影响。[/quote]
使用连接池后,通常session.close()方法没不直接关闭数据连接