首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

OpenSessionInViewFilter更新有关问题

2012-10-26 
OpenSessionInViewFilter更新问题在项目中配置OpenSessionInViewFilter后,首先会出现的问题:public class

OpenSessionInViewFilter更新问题
在项目中配置OpenSessionInViewFilter后,首先会出现的问题:

public class MyOpenSessionInViewFilter extends OpenSessionInViewFilter{@Overrideprotected void closeSession(Session session, SessionFactory sessionFactory) {session.flush();session.getTransaction().commit();super.closeSession(session, sessionFactory);}@Overrideprotected Session getSession(SessionFactory sessionFactory)throws DataAccessResourceFailureException {Session session = SessionFactoryUtils.getSession(sessionFactory, true);session.beginTransaction();FlushMode flushMode = getFlushMode();if (flushMode != null) {this.setFlushMode(FlushMode.AUTO);}return session;}}
1 楼 sswh 2011-06-28   第1个问题:
在写操作的时候尽量使用事务(比如,Spring事务在打开时会更改FlushMode)。
OpenSessionInView的FlushMode设置为Never是有道理的,
这对于列表或者查询请求,会去掉hibernate进行脏检查的时间,可以提升效率。

第2个问题:
可以用merge方法,就不会出现update失败的情况了。
但通常update执行之前,如果不做复杂查询的话,一般update也很少会出错的。

另外,按你更改的代码,问题更多:
1、底层数据库连接时间延长了(扩展到了Filter的范围),而正常使用OpenSessionInView的话,是在打开事务的时候才获取底层数据库连接的。
2、没法处理回滚的情况。
3、对于查询类请求,效率降低。(FlushMode.AUTO)

2 楼 sswh 2011-06-28   另外,设置singleSession=false的含义是 延迟Session的关闭到Filter结束的时候。
singleSession=false并不决定使用同一个Session还是多个Session。
这个还是要由Spring事务传播行为来决定。
而使用多个Session反而更容易出现update失败的情况。

热点排行