hibernate3+spring2.0 + OpenSessionInViewFilter
程序员文章站
2022-04-20 09:01:00
...
spring2.0和hibernate3.0整合存在挺多问题,其中ASM.jar包的版本冲突暂且不说,就光一个OpenSessionInViewFilter就够恶心人了。今天终于把它搞定了。按照原始的事务声明和配置形式对于spring2.0+hibernate3.0+OpenSessionInVewFilter已经不生效了,因为spring2.0里面的OpenSessionInViewFilter的getSession方法中会对session的flushMode设定一个默认为NEVER的值,而这个值在hibernate3.0似乎是不能理解的。
所以一旦你使用默认形式去管理session就会出一个
的异常。产生的原因就是和session的flushMode有关系,我们来看一下OpenSessionInViewFilter这个类里面的getSession方法
这里面FlushMode flushMode = getFlushMode(); 得到的flushMode就是NEVER然后再扔到session 里面当然不行喽,解决办法就是继承OpenSessionInViewFilter类,然后重写这个方法,加句 this.setFlushMode(FlushMode.AUTO);或者干脆把session里面直接扔个FlushMode.AUTO,然后再重写一个叫closeSession的方法,记住一定要重写,因为增加了flushMode以后要调用session.flush()才可以正常提交数据,其实重写closeSession就是为了加1句session.flush(),然后下面调用super.closeSession()方法就行了。 :oops:
所以一旦你使用默认形式去管理session就会出一个
Write operations are not allowed in read-only mode(FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
的异常。产生的原因就是和session的flushMode有关系,我们来看一下OpenSessionInViewFilter这个类里面的getSession方法
protected Session getSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException {
Session session = SessionFactoryUtils.getSession(sessionFactory, true);
FlushMode flushMode = getFlushMode();
if (flushMode != null) {
session.setFlushMode(flushMode);
}
return session;
}
这里面FlushMode flushMode = getFlushMode(); 得到的flushMode就是NEVER然后再扔到session 里面当然不行喽,解决办法就是继承OpenSessionInViewFilter类,然后重写这个方法,加句 this.setFlushMode(FlushMode.AUTO);或者干脆把session里面直接扔个FlushMode.AUTO,然后再重写一个叫closeSession的方法,记住一定要重写,因为增加了flushMode以后要调用session.flush()才可以正常提交数据,其实重写closeSession就是为了加1句session.flush(),然后下面调用super.closeSession()方法就行了。 :oops:
上一篇: 拦截器学习指导
推荐阅读
-
OpenSessionInViewFilter 的配置及替代方案
-
OpenSessionInViewFilter详细使用说明
-
OpenSessionInViewFilter作用及配置[转]
-
servlet+Spring+hibernate请求线程绑定hibernate的session控制懒加载-OpenSessionInViewFilter
-
Spring配置之OpenSessionInViewFilter
-
在项目中SSH或SSH2中OpenSessionInViewFilter的配置顺序(实质过滤器的配置顺序)
-
OpenSessionInViewFilter不起作用问题
-
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
-
OpenSessionInViewFilter详细使用说明 OpenSessionInViewFilter延迟加载
-
hibernate3+spring2.0 + OpenSessionInViewFilter