Spring与hibernate整合创建web应用的hibernatesession问题
大家好我现在使用Spring与hibernate整合创建web应用,使用了Spring的HibernateTemplate问题来了,我使用hibernateTemplat...
大家好
我现在使用Spring与hibernate整合创建web应用,使用了Spring的HibernateTemplate
问题来了,
我使用hibernateTemplate的get(Class<?> cls, Serializable pk)也就是根据表和主键来查数据的方法的时候,我发现每次我执行一次这样的查找,spring都会给我返回一个新的hibernate session.
首先不论连接数暴涨的问题,在这个项目里我很依赖一级缓存.这样他使得实际上没有了一级缓存,因为他总是会给你一个新的新的hibernate session.
在web.xml里我配置了opensessioninviewfilter,也设置了singlesession为true.依然不见效果
查询很多资料也找不到解决方案.请求指点
对了,事物中这个方法也设置为了readOnly 展开
我现在使用Spring与hibernate整合创建web应用,使用了Spring的HibernateTemplate
问题来了,
我使用hibernateTemplate的get(Class<?> cls, Serializable pk)也就是根据表和主键来查数据的方法的时候,我发现每次我执行一次这样的查找,spring都会给我返回一个新的hibernate session.
首先不论连接数暴涨的问题,在这个项目里我很依赖一级缓存.这样他使得实际上没有了一级缓存,因为他总是会给你一个新的新的hibernate session.
在web.xml里我配置了opensessioninviewfilter,也设置了singlesession为true.依然不见效果
查询很多资料也找不到解决方案.请求指点
对了,事物中这个方法也设置为了readOnly 展开
展开全部
1、Spring 提供了 HibernateTemplate,用于持久层访问,该模板类无须显示打开 Session及关闭 Session。它只要获得 SessionFactory 的引用,将可以智能打开 Session,并在持久化访问结束后关闭 Session ,程序开发只需完成持久层逻辑,通用的操作则由HibernateTemplate 完成。
2、 Spring 提供"每事务一次 Session" 的机制,该机制能大大提高了系统性能,而且 Spring 对 Session 的管理是透明的,无须在代码中操作 Session。
这就是原因了,spring在底层会自动关闭session,没办法控制;如果你要是用session中的数据的话,可以在action中实现(implements session)session,自己在action中定义一个session属性,
public Session session; 接下来在action中接收你查出来的数据,通过session.put("名称",接收到的对象);就可以了。
2、 Spring 提供"每事务一次 Session" 的机制,该机制能大大提高了系统性能,而且 Spring 对 Session 的管理是透明的,无须在代码中操作 Session。
这就是原因了,spring在底层会自动关闭session,没办法控制;如果你要是用session中的数据的话,可以在action中实现(implements session)session,自己在action中定义一个session属性,
public Session session; 接下来在action中接收你查出来的数据,通过session.put("名称",接收到的对象);就可以了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询