-
关于Spring的OpenSessionInViewFilter的Hibernate会话25
<class name="com.cmmi.bcm.data.BcmGood" table="bcm_good" schema="dbo" lazy="true">
这个表有N个外表关联,然后再web.xml中加上了过滤,成功的在web展示页面中显示每个BcmGood的数据,但是我加了WorkHibernateFilter过滤以后,其他(单表业务)模块的根本不能做相应业务处理(saveorupdate,del),望大家多多指教,qq:289450605 一直在线。<filter> <filter-name>WorkHibernateFilter</filter-name> <filter-class>com.***.fiter.IDEHibernateFilter</filter-class> </filter> <filter-mapping> <filter-name>WorkHibernateFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
IDEHibernateFilter.javapublic class IDEHibernateFilter extends OpenSessionInViewFilter { protected Session getSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException { Session session = SessionFactoryUtils.getSession(sessionFactory, true); session.setFlushMode(FlushMode.AUTO); return session; } }
问题补充:
<bean id="icurrencyService"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref local="transactionManager" />
</property>
<property name="target">
<ref local="currencyServiceimpl" />
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
问题补充:
在没有加OpenSessionInViewFilter过滤的时候,单表业务成功操作,显示相应结果。然后BcmGood是一张一对多表,用列表显示时报session close,然后加上OpenSessionInViewFilter过滤,其它(一对一)表的业务像del和saveorupdate,业务无法操作成功。这个执行过程中,无异常抛出。2008年6月22日 18:09
5个答案 按时间排序 按投票排序
-
采纳的答案
OpenSessionInViewFilter作用就是在调用你写的代码前绑定session,只要保证它早于你的Action执行就可以了,
给你个参考的配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- *************************************************************************start******** -->
<display-name>demo</display-name>
<!-- **********************************************************************context-param*********** -->
<!--spring配置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:appContext*.xml</param-value>
</context-param>
<!-- ***********************************************************************listener********** -->
<!--spring配置-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- **********************************************************************filter*********** -->
<!-- 中文过滤器 -->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.syj.util.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<!-- hibernate3 OpenSessionInView 模式 -->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>
com.syj.util.OpenSessionInViewFilter
</filter-class>
</filter>
<!--struct配置 -->
<filter>
<filter-name>Struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<!-- **********************************************************************filter-mapping*********** -->
<!-- 中文过滤器 -->
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- hibernate3 OpenSessionInView 模式 注意:一定配置struct mapping的前面-->
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<!--struct配置 注意:一定配置OpenSessionInView mapping的后面-->
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ************************************************************************servlet********* -->
<!-- 负责系统初始化的启动Servlet -->
<servlet>
<servlet-name>initServlet</servlet-name>
<servlet-class>com.syj.action.InitServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 配置图形码 -->
<servlet>
<servlet-name>codeFact</servlet-name>
<servlet-class>com.syj.util.CodeFact</servlet-class>
</servlet>
<!-- jfreechart显示图表 -->
<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>
org.jfree.chart.servlet.DisplayChart
</servlet-class>
</servlet>
<!-- ************************************************************************servlet-mapping********* -->
<!-- 负责系统初始化的启动Servlet -->
<servlet-mapping>
<servlet-name>initServlet</servlet-name>
<url-pattern>/initServlet</url-pattern>
</servlet-mapping>
<!-- 配置图形码 -->
<servlet-mapping>
<servlet-name>codeFact</servlet-name>
<url-pattern>/codeFact</url-pattern>
</servlet-mapping>
<!-- jfreechart显示图表 -->
<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/servlet/DisplayChart</url-pattern>
</servlet-mapping>
<!-- *************************************************************************jsp-config******** -->
<jsp-config>
<!--syj标签库配置-->
<taglib>
<taglib-uri>syj.tld</taglib-uri>
<taglib-location>/WEB-INF/syj.tld</taglib-location>
</taglib>
</jsp-config>
<!-- *************************************************************************end******** -->
</web-app>2008年6月24日 11:10
-
没有异常抛出,也没有执行成功,建议调试了看看是否真的没有异常,或是被catch没有打印,或是事务没有成功执行,或是其他。只能逐步调试了看了
2008年6月23日 17:08
相关推荐
在Spring配置文件中,你需要配置数据源(dataSource)和SessionFactory,这样可以将Hibernate的配置整合到Spring中,同时可以移除hibernate.cfg.xml文件,让Spring管理数据库连接和会话。 6. **使用...
Spring的配置文件中也需要配置SessionFactory,以便管理Hibernate的会话。 4. 在业务层(Service)和DAO层,使用Spring的注解或XML配置来管理bean。Service层通常封装业务逻辑,调用DAO层进行数据操作。 5. 最后,...
- 使用Spring提供的`OpenSessionInViewFilter`过滤器来管理Hibernate会话,确保每个HTTP请求对应一个会话。 - 在Spring的配置文件中定义Hibernate的SessionFactory,以及与之相关的DAO层组件。 #### 五、反向表...
在`web.xml`中,Struts2的配置通过`StrutsPrepareAndExecuteFilter`进行,而Spring与Hibernate的集成则通过`OpenSessionInViewFilter`实现。这些配置保证了请求到达时,Struts2能正确处理请求,同时Spring能够管理和...
`OpenSessionInViewFilter`是Spring为配合Hibernate设计的一个过滤器,其主要作用是在Web请求处理过程中打开并维持一个Hibernate Session,直到视图渲染完成。这样做的好处在于能够确保在整个请求处理过程中Session...
- **Hibernate 会话管理**:同样通过 `<filter>` 和 `<filter-mapping>` 配置了 `OpenSessionInViewFilter`,用于管理 Hibernate 的会话生命周期。`singleSession` 参数被设置为 `true` 表示使用单一会话模式,即每...
- **SessionFactory的配置**:使用`LocalSessionFactoryBean`来读取`hibernate.cfg.xml`,这是Hibernate的核心配置文件,负责建立数据库连接和会话工厂。 - **事务管理器配置**:`HibernateTransactionManager`用于...
整合Hibernate主要是通过SessionFactory创建和管理数据库会话,并利用DAO(Data Access Object)层来进行数据操作。 3. **Spring** 是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、事务管理等...
此外,Spring的`OpenSessionInViewFilter`或`OpenSessionInViewInterceptor`模式常用于Web应用,它能在HTTP请求的生命周期内保持一个Hibernate Session,以处理跨多个DAO方法的事务。然而,这种模式在多数据库的情况...
我们可以通过配置XML文件和注解来实现整合,并使用opensessionInviewfilter来解决会话问题。 Spring JDBC面向接口编程 本节讲解了如何使用Spring JDBC来实现面向接口编程。我们可以通过配置XML文件和注解来实现DAO...
- **OpenSessionInView**:解决长时间 HTTP 请求导致的 Hibernate 会话问题,可以使用 OpenSessionInViewFilter 或 OpenSessionInViewInterceptor。 **5. Spring 事务管理** Spring 提供了两种事务管理方式: - *...
- 通过OpenSessionInViewFilter保持会话持续时间,确保事务的一致性。 #### 七、Struts2+Spring+Hibernate整合 **整合要点:** - Struts2作为Web层框架。 - Spring作为业务逻辑层框架,负责Bean管理和AOP等功能。 ...
总的来说,`CharacterEncodingFilter`和`OpenSessionInViewFilter`是Spring框架中用于优化Web应用处理的两个关键组件,它们分别解决了字符编码和数据库会话的问题,提高了应用的稳定性和用户体验。同时,了解SSH框架...
`OpenSessionInViewFilter` 是一个解决在 Web 应用中懒加载数据时遇到的 Hibernate 问题的过滤器,确保每个 HTTP 请求都在一个 Hibernate 会话范围内,从而避免 LazyInitializationException。 **Spring JDBC 面向...
HibernateCallback提供了回调接口,用于执行Hibernate会话操作;HibernateDaoSupport是为数据访问对象提供的支持基类。 15. Struts2与Spring、Hibernate整合: 整合Struts2、Spring和Hibernate可以构建一个Web层、...
- **Hibernate OpenSessionInViewFilter**:开启事务,确保在视图层操作时,Hibernate会话保持打开状态,通常需置于Struts2 Filter之前。 #### 三、常见问题与解决方案 - **包的导入冲突**:在构建SSH框架时,...
- **Hibernate会话管理过滤器**:OpenSessionInViewFilter确保在每个请求的生命周期内保持一个打开的Hibernate Session,从而实现懒加载: ```xml <filter-name>OpenSessionInViewFilter <filter-class>org....
以下是一些关于Spring的重要知识点,包括其优点、依赖注入(DI)的实现方式、控制反转(IoC)的理解、ORM框架的支持以及事务管理。 1. **Spring的优点**: - **分层架构**:Spring允许开发者选择使用需要的模块,避免...
- 还有其他如请求(Request)、会话(Session)和全局会话(Global Session)作用域。 6. **Bean的生命周期管理** - 描述Bean的初始化和销毁过程,以及如何自定义这些过程。 - 使用`init-method`和`destroy-...
- **OpenSessionInViewFilter**:此过滤器在请求处理开始时打开一个Hibernate会话,在请求结束时关闭这个会话。这确保了在请求处理过程中保持一个持久的会话,从而解决了懒加载时可能发生的异常。 - **配置示例**...