关于Spring的OpenSessionInViewFilter的Hibernate会话

问题描述

<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)能不能具体说明一下?

时间: 2024-10-22 10:10:39

关于Spring的OpenSessionInViewFilter的Hibernate会话的相关文章

Java新手如何学习Spring、Struts、Hibernate三大框架?(转)

整理知乎大牛答案: 1.入门看文档(blog,书籍等等),深入理解配置文件的含义(Spring.Struts.Hibernate); 2.遇到问题,自己动手解决,如果解决了,为什么这样解决?(凡事总问个为什么) 3.具体到hibernate的入门, 首先还是先要学会数据库, JDBC, 设计模式, 这些都是基础. 我的个人理解:凡事总问为什么,很关键,这是入门也是以后进一步发展的基础. 具体新手学习视频资料可以参考看看网上的视频教程,但理念必须在入门之前建立起来. 如果你是个老师(Java工程师

spring和struts、hibernate的集成

问题描述 spring和struts.hibernate的集成原理是什么?或者说spring和struts.hibernate是怎么集成的??? 解决方案 解决方案二:你要文档?解决方案三:有文档更好谢谢!!!解决方案四:在这里发帖还不如直接谷歌呢,一大堆资料够研究半天了

Spring的事务和Hibernate的事务有什么区别

问题描述 想了解一下Spring的事务和Hibernate的事务有什么区别?Hibernate的crud都用到了Transaction,在方法开始时,打开事务,然后结束时提交事务,当Hb与Sp协作时,对于一个运行在服务层且在spring事务中的方法A,调用了运行在Dao层的方法B和C,B,C的操作是通过hb实现的,我就是想不通如下两点:1A方法调用B后,Hb事务不是提交了吗,也就是事务上下文在这里就中断了,如果再调用C,怎么能保证b和c在一个事务环境中呢?2我知道hb的事务控制是通过jdbc的,

关于spring注解定时任务查hibernate没有释放连接

问题描述 关于spring注解定时任务查hibernate没有释放连接 如图,我按照网上的教程配置好了spring 的注解定时任务,但是每次执行了几次以后,数据库的连接数就上升,连接数没释放,我的是spring 管理hibernate关闭session的,别的类都没有这个问题,唯独是这个TimeService不能关闭.当然,我自己open一个Session是没有问题的,连接数不能上升,但是我想更加简便,而不需要每次都要我打开一个session关闭它.

spring 的OpenSessionInViewFilter简介

假设在你的应用中Hibernate是通过spring 来管理它的session.如果在你的应用中没有使用OpenSessionInViewFilter或者OpenSessionInViewInterceptor.session会在transaction结束后关闭. 如果你采用了spring的声明式事务模式,它会对你的被代理对象的每一个方法进行事务包装(AOP的方式).如下:  <bean id="txProxyTemplate" abstract="true"

用 OpenSessionInViewInterceptor 的思路解决 Spring框架中的Hibernate Lazy

众所周知, 为了解决 Hibernate Lazy 问题, Spring 中引入了 OpenSessionInViewInterceptor, 这样虽然解决了页面上的 Lazy Load 问题,却增加了各层之间的偶合性, 如果一个 Lazy 的 Collection 在页面上可以被正确的 load, 但是如果请求不是来自于 HttpServletRequest (比如在 TestCase 或 Service 中希望获取 lazy 的属性), 一般会导致两种错误: 代码 1. 设置了 lazy =

spring mvc-Spring mvc结合Hibernate中实现ajxa出现懒加载异常

问题描述 Spring mvc结合Hibernate中实现ajxa出现懒加载异常 我要实现一个选择省份加载城市列表,然后选择城市加载区列表的操作,但是我在加载城市的时候一直报懒加载异常,session提前关闭,我觉得是因为我城市中设置的private Province province 对象的原因,请问大神这有什么好的解决办法吗 解决方案 懒加载的话,你直接用fetch属性设为eager就行了,session提前关闭,,可能是你的openSessionInView,,这个过滤器没用,,而且省市区

spring mvc-谁有 springmvc+hibernate的写计划功能的项目

问题描述 谁有 springmvc+hibernate的写计划功能的项目 谁有 springmvc+hibernate的写 计划 任务 功能的项目 解决方案 唉 有这种类型的也可以的 解决方案二: 计划任务?定时任务吗?可以试试quartz

spring data jpa和hibernate的lazy load问题

问题描述 环境spring4.0.3.hibernate4.3.4,用的是springmvc和springdataJPA,开启懒加载后,在页面就会出现nosession的错误,试了好多方法都不行这篇帖子,跟我说的情况类似,试过了任然不行,请教大神! 解决方案