您的位置:首页 > 其它

Hibernate懒加载在SSH项目中的配置及原理

2016-04-19 23:13 316 查看
Hibernate懒加载在SSH项目中

当使用懒加载的时候, 查找出来的对象中的数据如对象中的集合,它并没有加载出来,只有当对象调用的时候才会向数据库发出查询语句, 这就会造成在hibernate中得到一个查询出来的对象,当在action或者jsp页面取里面的数据, 这时候session已经关闭了,查询请求当然就发不出去了,抛出no session 异常

解决:

为了解决这个问题,配置一个 OpenSessionInViewFilter过滤器,它在struts2过滤器之前.并且需要在spring中配置好sessionFactory

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
...


在web.xml中的配置

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext.xml</param-value>
</context-param>
<!-- 注意OpenSessionInViewFilter过滤器要配置在struts2过滤器之前 -->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


它的执行原理就是在Struts2过滤器执行之前开启session事物,在struts2执行完毕之后,关闭session, 那么在struts2的整个响应过程共session的是存在的,随时都可以向数据库取数据.

但是session的存在时间延长,一级缓存中的数据在内存中停留时间变长,占用内存.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate session ssh