OpenSessionInViewFilter是Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开Hibernate的Session,一直保持这个Session,直到这个请求结束,具体是通过一个Filter来实现的。
由于Hibernate引入了Lazy Load特性,使得脱离Hibernate的Session周期的对象如果再想通过getter方法取到其关联对象的值,Hibernate会抛出一个LazyLoad的Exception。所以为了解决这个问题,Spring引入了这个Filter,使得Hibernate的Session的生命周期变长。
有两种方式可以配置实现OpenSessionInView,分别是OpenSessionInViewInterceptor和OpenSessionInViewFilter,功能完全相同,只不过一个在web.xml配置,另一个在application.xml配置而已。我个人比较倾向配置在application.xml里,因为web.xml里配置的东西的太多的话容易发生冲突,虽然可以调整,但是毕竟多了个麻烦。
OpenSessionInViewInterceptor配置:
<beans>
<bean name="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="openSessionInViewInterceptor"/>
</list>
</property>
<property name="mappings">
......
</property>
</bean>
......
</beans>
OpenSessionInViewFilter配置: (此监听器应该在struts2的监听器前面)
<web-app>
......
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter>
......
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
......
</web-app>
分享到:
相关推荐
- `singleSession`:如果设置为`true`,则表明启用OpenSessionInView模式,即在请求处理期间始终维持一个打开的Session。如果设置为`false`,则不启用此模式。 - `<url-pattern>`:定义哪些URL路径将通过此过滤器...
**表格13**: web.xml配置文件OpenSessionInView设置(必需设置) ```xml <filter-name>openSessionInViewFilter <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter ...
然而,在没有使用Spring提供的`Open Session In View`的情况下,当懒加载设置为`true`时,如果在服务层(service or DAO)关闭了session,则需要在应用层内手动初始化所有关系集合(例如通过调用`company.getEmployees...
同时,需要注意的是,OpenSessionInView模式虽然方便,但也会带来潜在的问题,如事务边界不清晰和会话泄漏。因此,在实际应用中,应结合具体需求谨慎使用,并考虑使用更现代的解决方案,如Spring Data JPA的...
`CharacterEncodingFilter`的作用就是确保请求和响应的字符编码统一为指定的格式,通常设置为UTF-8,避免因为编码问题导致的数据丢失或显示错误。通过在Web应用的配置文件(如web.xml)中添加该过滤器,可以全局设定...
8. **配置OpenSessionInView过滤器**: - Spring提供了一个名为`OpenSessionInViewFilter`的过滤器,用于解决在Web应用中处理请求时的事务边界问题。它确保每个HTTP请求都有一个开启的Hibernate Session。 - 配置...
在Web开发中,OpenSessionInView模式能有效解决这个问题,但也要注意避免长时间占用Session资源。 其次,【抓取粒度】的调整也是关键。粒度决定了导航关联关系时预加载的数据量。通过设置batch-size,可以控制一次...
为了防止在同一容器中部署多个应用时的日志配置冲突,我们需要通过设置唯一的`webAppRootKey`来指定日志的存储路径。如下面的代码所示: ```xml <param-name>webAppRootKey <param-value>itservice.root ``...
4. 解决OpenSessionInView问题,可以使用OpenSessionInViewFilter或OpenSessionInViewInterceptor,确保在一次HTTP请求中保持Hibernate Session的开放状态,以解决懒加载异常。 Spring的事务管理分为编程式和声明式...
在Web应用的配置文件Web.xml中,有两个重要的配置部分:一是OpenSessionInView(OSIV)模式,通过`OpenSessionInViewFilter`确保在每次HTTP请求中都保持一个有效的Hibernate Session,避免了懒加载异常。二是设置...
使用`createQuery()`或`createSQLQuery()`创建Query对象后,可以调用`setFirstResult()`设置起始索引,`setMaxResults()`设置每页的最大数量来实现分页。例如: ```java Session session = sessionFactory....
- 在项目设置中确保选中了“Enable Hibernate Annotations Support”选项。 2. **依赖管理**: - 添加Struts2、Spring、Hibernate及相关依赖到项目的build路径中。推荐使用Maven或Gradle进行依赖管理。 #### 三...
- Spring默认使用单例模式管理Bean,需要多例时需设置`scope`属性为`"prototype"`。 #### 三、使用AOP进行整合 **AOP(Aspect Oriented Programming,面向切面编程)** 是Spring提供的另一种强大功能,它可以用来...
可以设置断点,调试各个框架之间的交互,理解数据流和控制流。 7. **最佳实践**:在实际项目中,要注意事务边界管理,避免长时间打开Session导致内存泄漏。另外,对于性能优化,可以考虑使用二级缓存,或者使用HQL...
8. **设置字符编码过滤器**:为了确保请求和响应的正确编码,需要在`web.xml`中添加一个自定义的Filter,如`SetEncodingFilters`,以设置请求和响应的字符编码为UTF-8或其他指定的编码格式。 在实际开发中,SSH框架...
3. 在使用中如果遇到OpenSessionInView的问题,可以添加OpenSessionInViewFilter或OpenSessionInViewInterceptor。 五、Spring的事务管理 Spring框架提供了事务管理机制,提供了几个关于事务处理的类: 1. ...
在`Person.hbm.xml`配置文件中,我们可以看到`address`属性被设置为`lazy="true"`,表示在加载Person实体时,其关联的Address集合不会立即加载。 ```xml name="address" table="address" lazy="true" cascade=...
除了在Struts2配置文件中进行上述设置外,还需要在`web.xml`文件中进行Spring的初始化,具体包括: - 使用`ContextLoaderListener`监听器来加载Spring配置文件。 - 指定Spring配置文件的位置。 ```xml ...
- OpenSessionInView模式:解决长时间数据库会话问题,可通过过滤器或拦截器实现。 5. **Spring事务管理** - TransactionDefinition:定义事务属性,如隔离级别、传播行为等。 - TransactionStatus:表示当前...