0 0

关于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.java
public 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个答案 按时间排序 按投票排序

0 0

采纳的答案

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
0 0

没有异常抛出,也没有执行成功,建议调试了看看是否真的没有异常,或是被catch没有打印,或是事务没有成功执行,或是其他。只能逐步调试了看了

2008年6月23日 17:08
0 0

执行不了,抛异常了吗?

2008年6月23日 12:37
0 0

查看一下你的事务配置方式好么?

2008年6月23日 09:09
0 0

引用
其他(单表业务)模块的根本不能做相应业务处理(saveorupdate,del)

能不能具体说明一下?

2008年6月23日 02:31

相关推荐

    Struts,Spring与hibernate集成

    在Spring配置文件中,你需要配置数据源(dataSource)和SessionFactory,这样可以将Hibernate的配置整合到Spring中,同时可以移除hibernate.cfg.xml文件,让Spring管理数据库连接和会话。 6. **使用...

    Struts+Hibernate+Spring的基本流程

    Spring的配置文件中也需要配置SessionFactory,以便管理Hibernate的会话。 4. 在业务层(Service)和DAO层,使用Spring的注解或XML配置来管理bean。Service层通常封装业务逻辑,调用DAO层进行数据操作。 5. 最后,...

    struts2.1+spring3.0+hibernate3.3整合

    - 使用Spring提供的`OpenSessionInViewFilter`过滤器来管理Hibernate会话,确保每个HTTP请求对应一个会话。 - 在Spring的配置文件中定义Hibernate的SessionFactory,以及与之相关的DAO层组件。 #### 五、反向表...

    struts2.3+spring3.1.2+hibernate4.1.6 配置说明

    在`web.xml`中,Struts2的配置通过`StrutsPrepareAndExecuteFilter`进行,而Spring与Hibernate的集成则通过`OpenSessionInViewFilter`实现。这些配置保证了请求到达时,Struts2能正确处理请求,同时Spring能够管理和...

    Spring hibernate opensessioninview

    `OpenSessionInViewFilter`是Spring为配合Hibernate设计的一个过滤器,其主要作用是在Web请求处理过程中打开并维持一个Hibernate Session,直到视图渲染完成。这样做的好处在于能够确保在整个请求处理过程中Session...

    spring+struts+hibernate的配置文档

    - **Hibernate 会话管理**:同样通过 `&lt;filter&gt;` 和 `&lt;filter-mapping&gt;` 配置了 `OpenSessionInViewFilter`,用于管理 Hibernate 的会话生命周期。`singleSession` 参数被设置为 `true` 表示使用单一会话模式,即每...

    struts_hibernate_spring集成

    - **SessionFactory的配置**:使用`LocalSessionFactoryBean`来读取`hibernate.cfg.xml`,这是Hibernate的核心配置文件,负责建立数据库连接和会话工厂。 - **事务管理器配置**:`HibernateTransactionManager`用于...

    Struts+Hibernate+Spring的整合方法

    整合Hibernate主要是通过SessionFactory创建和管理数据库会话,并利用DAO(Data Access Object)层来进行数据操作。 3. **Spring** 是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、事务管理等...

    HibernateSpring多数据库解决方案.doc

    此外,Spring的`OpenSessionInViewFilter`或`OpenSessionInViewInterceptor`模式常用于Web应用,它能在HTTP请求的生命周期内保持一个Hibernate Session,以处理跨多个DAO方法的事务。然而,这种模式在多数据库的情况...

    马士兵Spring课堂笔记(超级详细版).pdf

    我们可以通过配置XML文件和注解来实现整合,并使用opensessionInviewfilter来解决会话问题。 Spring JDBC面向接口编程 本节讲解了如何使用Spring JDBC来实现面向接口编程。我们可以通过配置XML文件和注解来实现DAO...

    spring面试题大全.doc

    - **OpenSessionInView**:解决长时间 HTTP 请求导致的 Hibernate 会话问题,可以使用 OpenSessionInViewFilter 或 OpenSessionInViewInterceptor。 **5. Spring 事务管理** Spring 提供了两种事务管理方式: - *...

    马士兵spring学习笔记

    - 通过OpenSessionInViewFilter保持会话持续时间,确保事务的一致性。 #### 七、Struts2+Spring+Hibernate整合 **整合要点:** - Struts2作为Web层框架。 - Spring作为业务逻辑层框架,负责Bean管理和AOP等功能。 ...

    Spring提供的CharacterEncoding和OpenSessionInView功能

    总的来说,`CharacterEncodingFilter`和`OpenSessionInViewFilter`是Spring框架中用于优化Web应用处理的两个关键组件,它们分别解决了字符编码和数据库会话的问题,提高了应用的稳定性和用户体验。同时,了解SSH框架...

    spring学习笔记

    `OpenSessionInViewFilter` 是一个解决在 Web 应用中懒加载数据时遇到的 Hibernate 问题的过滤器,确保每个 HTTP 请求都在一个 Hibernate 会话范围内,从而避免 LazyInitializationException。 **Spring JDBC 面向...

    Spring学习笔记

    HibernateCallback提供了回调接口,用于执行Hibernate会话操作;HibernateDaoSupport是为数据访问对象提供的支持基类。 15. Struts2与Spring、Hibernate整合: 整合Struts2、Spring和Hibernate可以构建一个Web层、...

    SSH详细配置文件(自己个人经验)

    - **Hibernate OpenSessionInViewFilter**:开启事务,确保在视图层操作时,Hibernate会话保持打开状态,通常需置于Struts2 Filter之前。 #### 三、常见问题与解决方案 - **包的导入冲突**:在构建SSH框架时,...

    ssh配置文件

    - **Hibernate会话管理过滤器**:OpenSessionInViewFilter确保在每个请求的生命周期内保持一个打开的Hibernate Session,从而实现懒加载: ```xml &lt;filter-name&gt;OpenSessionInViewFilter &lt;filter-class&gt;org....

    java-spring面试题大全

    以下是一些关于Spring的重要知识点,包括其优点、依赖注入(DI)的实现方式、控制反转(IoC)的理解、ORM框架的支持以及事务管理。 1. **Spring的优点**: - **分层架构**:Spring允许开发者选择使用需要的模块,避免...

    spring2.5学习PPT 传智博客

    - 还有其他如请求(Request)、会话(Session)和全局会话(Global Session)作用域。 6. **Bean的生命周期管理** - 描述Bean的初始化和销毁过程,以及如何自定义这些过程。 - 使用`init-method`和`destroy-...

    spring框架中常用的配置

    - **OpenSessionInViewFilter**:此过滤器在请求处理开始时打开一个Hibernate会话,在请求结束时关闭这个会话。这确保了在请求处理过程中保持一个持久的会话,从而解决了懒加载时可能发生的异常。 - **配置示例**...

Global site tag (gtag.js) - Google Analytics