`

OpenSessionInView设置

 
阅读更多
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>
分享到:
评论

相关推荐

    Spring hibernate opensessioninview

    - `singleSession`:如果设置为`true`,则表明启用OpenSessionInView模式,即在请求处理期间始终维持一个打开的Session。如果设置为`false`,则不启用此模式。 - `&lt;url-pattern&gt;`:定义哪些URL路径将通过此过滤器...

    ssha 最新 最完整 配置信息

    **表格13**: web.xml配置文件OpenSessionInView设置(必需设置) ```xml &lt;filter-name&gt;openSessionInViewFilter &lt;filter-class&gt;org.springframework.orm.hibernate3.support.OpenSessionInViewFilter ...

    Open_Session_In_View详解.doc

    然而,在没有使用Spring提供的`Open Session In View`的情况下,当懒加载设置为`true`时,如果在服务层(service or DAO)关闭了session,则需要在应用层内手动初始化所有关系集合(例如通过调用`company.getEmployees...

    第30讲--Spring提供的CharacterEncoding和OpenSessionInView功能

    同时,需要注意的是,OpenSessionInView模式虽然方便,但也会带来潜在的问题,如事务边界不清晰和会话泄漏。因此,在实际应用中,应结合具体需求谨慎使用,并考虑使用更现代的解决方案,如Spring Data JPA的...

    Spring提供的CharacterEncoding和OpenSessionInView功能

    `CharacterEncodingFilter`的作用就是确保请求和响应的字符编码统一为指定的格式,通常设置为UTF-8,避免因为编码问题导致的数据丢失或显示错误。通过在Web应用的配置文件(如web.xml)中添加该过滤器,可以全局设定...

    ssh构架搭建步骤 (2).pdf

    8. **配置OpenSessionInView过滤器**: - Spring提供了一个名为`OpenSessionInViewFilter`的过滤器,用于解决在Web应用中处理请求时的事务边界问题。它确保每个HTTP请求都有一个开启的Hibernate Session。 - 配置...

    hibernate优化

    在Web开发中,OpenSessionInView模式能有效解决这个问题,但也要注意避免长时间占用Session资源。 其次,【抓取粒度】的调整也是关键。粒度决定了导航关联关系时预加载的数据量。通过设置batch-size,可以控制一次...

    Spring配置总结

    为了防止在同一容器中部署多个应用时的日志配置冲突,我们需要通过设置唯一的`webAppRootKey`来指定日志的存储路径。如下面的代码所示: ```xml &lt;param-name&gt;webAppRootKey &lt;param-value&gt;itservice.root ``...

    spring面试题大全

    4. 解决OpenSessionInView问题,可以使用OpenSessionInViewFilter或OpenSessionInViewInterceptor,确保在一次HTTP请求中保持Hibernate Session的开放状态,以解决懒加载异常。 Spring的事务管理分为编程式和声明式...

    SSH框架搭建.doc

    在Web应用的配置文件Web.xml中,有两个重要的配置部分:一是OpenSessionInView(OSIV)模式,通过`OpenSessionInViewFilter`确保在每次HTTP请求中都保持一个有效的Hibernate Session,避免了懒加载异常。二是设置...

    Hibernate分页总结

    使用`createQuery()`或`createSQLQuery()`创建Query对象后,可以调用`setFirstResult()`设置起始索引,`setMaxResults()`设置每页的最大数量来实现分页。例如: ```java Session session = sessionFactory....

    SSH全注解环境搭建

    - 在项目设置中确保选中了“Enable Hibernate Annotations Support”选项。 2. **依赖管理**: - 添加Struts2、Spring、Hibernate及相关依赖到项目的build路径中。推荐使用Maven或Gradle进行依赖管理。 #### 三...

    SSH整合 struts+hibernate+spring

    - Spring默认使用单例模式管理Bean,需要多例时需设置`scope`属性为`"prototype"`。 #### 三、使用AOP进行整合 **AOP(Aspect Oriented Programming,面向切面编程)** 是Spring提供的另一种强大功能,它可以用来...

    SSH项目整合示例【源码】

    可以设置断点,调试各个框架之间的交互,理解数据流和控制流。 7. **最佳实践**:在实际项目中,要注意事务边界管理,避免长时间打开Session导致内存泄漏。另外,对于性能优化,可以考虑使用二级缓存,或者使用HQL...

    搭建SSH框架总结.doc

    8. **设置字符编码过滤器**:为了确保请求和响应的正确编码,需要在`web.xml`中添加一个自定义的Filter,如`SetEncodingFilters`,以设置请求和响应的字符编码为UTF-8或其他指定的编码格式。 在实际开发中,SSH框架...

    Spring面试题大全

    3. 在使用中如果遇到OpenSessionInView的问题,可以添加OpenSessionInViewFilter或OpenSessionInViewInterceptor。 五、Spring的事务管理 Spring框架提供了事务管理机制,提供了几个关于事务处理的类: 1. ...

    hibernate 中的lazy属性祥解.txt

    在`Person.hbm.xml`配置文件中,我们可以看到`address`属性被设置为`lazy="true"`,表示在加载Person实体时,其关联的Address集合不会立即加载。 ```xml name="address" table="address" lazy="true" cascade=...

    ssh配置总结

    除了在Struts2配置文件中进行上述设置外,还需要在`web.xml`文件中进行Spring的初始化,具体包括: - 使用`ContextLoaderListener`监听器来加载Spring配置文件。 - 指定Spring配置文件的位置。 ```xml ...

    最全的Spring考题与答案

    - OpenSessionInView模式:解决长时间数据库会话问题,可通过过滤器或拦截器实现。 5. **Spring事务管理** - TransactionDefinition:定义事务属性,如隔离级别、传播行为等。 - TransactionStatus:表示当前...

Global site tag (gtag.js) - Google Analytics