OpenSessionInViewFilter是Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开Hibernate的Session,一直保持这个Session,直到这个请求结束,具体是通过一个Filter来实现的。
由于Hibernate引入了Lazy Load特性,使得脱离Hibernate的Session周期的对象如果再想通过getter方法取到其关联对象的值,Hibernate会抛出一个LazyLoad的Exception。所以为了解决这个问题,Spring引入了这个Filter,使得Hibernate的Session的生命周期变长。
1.用法:在web.xml中文件中加入以代码:(加在其它filter前面)
<!-- OpenSessionInViewFilter -->
<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>*.action</url-pattern>
</filter-mapping>
2.问题:在页面上循环输出list中的对象时(比如struts2的迭代标签<s:iterator value="page.resultList" status="st">),对list中的对象属性进行延迟加载时会出现代码爆炸问题。list中有多少对象,就会根据ID发出多少条SQL语句。延迟加载会使用类似where userpojo0_.Id=?的条件来加载实体。
解决方法:可以使用batch-size 属性来解决。在多对一关系中,在多方获取一方的属性,配制batch-size例如:
<class name="umbrella.pojo.UserPOJO" table="user" catalog="cobalt" batch-size="5">
或者使用注解:
@Entity
@Table(name = "T_DEPARTMENT")
@BatchSize(size=20)
public class Department implements java.io.Serializable {}
此时,产生的SQL语句会变成类似这样的形式:where userpojo0_.Id in (?,?,?,?,?)。
在一对多关系中,配制batch-size例如:
<set name="students" inverse="true" cascade="all" batch-size="5">
分享到:
相关推荐
-- AOP的切入点和通知 --> </aop:config> </beans> ``` - `<beans>`标签定义了Spring的配置文件根元素。 - 使用`xmlns`和`xsi:schemaLocation`指定命名空间和XSD验证文件位置。 - `<bean>`定义了Spring容器管理的...
<filter-name>OpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>singleSession</param-...
<property name="maxPoolSize" value="5"></property> <property name="minPoolSize" value="3"></property> <property name="acquireIncrement" value="2"></property> <property name=...
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>hibernateFilter</filter-name> <url-pattern>/*</url-pattern> ...
**2.3 OpenSessionInViewFilter使用方法** 为了提高性能,通常会在Spring中使用`OpenSessionInViewFilter`来管理Hibernate的Session。这样可以在整个请求周期内保持Session打开状态,从而避免多次打开和关闭Session...
<filter-name>openSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>singleSession</param-...
#### OpenSessionInViewFilter使用方法 **表格13**: web.xml配置文件OpenSessionInView设置(必需设置) ```xml <filter> <filter-name>openSessionInViewFilter</filter-name> <filter-class>org.springframework...
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> <!-- 设置Flush Mode --> <init-param> <param-name>flushMode</param-name> <param-value>AUTO</param-...
2. **OpenSessionInViewFilter配置**:该过滤器用于解决Hibernate的懒加载问题,在每个请求处理前后开启和关闭Session,确保线程安全和资源释放。 ```xml <!-- 配置OpenSessionInViewFilter --> <filter> ...
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter> <!-- ExtremeTable Excel/PDF 导出过滤器 --> <filter> <filter-name>eXtremeExport</filter-...
<filter-name>openSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>...
- 使用IDE的快捷方式自动生成getters和setters方法。 4. **创建实体类的映射文件**:在`src`目录下创建一个名为`User.hbm.xml`的文件,并添加以下内容: ```xml <hibernate-mapping package="com.lily.entity"> ...
从给定的文件信息来看,我们正在探讨的主题是配置(configuration),特别关注的是SSH泛型代码,这在Java Web开发中通常指的是Spring、Struts和Hibernate这三个框架的结合使用。下面,我们将深入解析这些概念以及...
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter> </web-app> ``` **2. Struts配置文件(struts-config.xml)** Struts配置文件用于定义Action映射...
-- 设置使用Spring作为对象工厂 --> <constant name="struts.objectFactory" value="spring"/> <!-- 定义包 --> <package name="crm_employee" extends="struts-default" namespace="/emp"> <!-- 定义Action -->...
- 在Spring的配置文件中,可以通过`<tx:advice>`元素来定义事务管理的策略,并且通过`<aop:config>`元素将事务管理策略应用到特定的Bean或方法上。 - 示例配置: ```xml <bean id="transactionManager" class=...
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter> ``` - `OpenSessionInViewFilter`过滤器可以开启Hibernate的延迟加载功能,使得在一个HTTP请求范围...
在处理Web应用时,Spring提供了一些关键特性,如`CharacterEncodingFilter`和`OpenSessionInViewFilter`,它们对于解决特定问题至关重要。 首先,让我们深入了解一下`CharacterEncodingFilter`。在Web应用中,字符...
<filter-name>OpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>...
-- Struts2配置 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> ...