问题描述
<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,业务无法操作成功。这个执行过程中,无异常抛出。
解决方案
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>
解决方案二:
没有异常抛出,也没有执行成功,建议调试了看看是否真的没有异常,或是被catch没有打印,或是事务没有成功执行,或是其他。只能逐步调试了看了
解决方案三:
执行不了,抛异常了吗?
解决方案四:
查看一下你的事务配置方式好么?
解决方案五:
引用其他(单表业务)模块的根本不能做相应业务处理(saveorupdate,del)能不能具体说明一下?