环境如下 
Struts2+Spring3+Hibernate3 
数据库 sqlserver2000 为了使用延迟加载, 加入了OpenSessionInViewFilter 
但发现, 在只有查询情况下, 请求处理完之后, 会有"打开的事务" 
注:"打开的事务"可以用sqlserver企业管理器自带的 活动监视器查看 
若是更新操作, 不会出现有"打开的事务" 若去掉OpenSessionInViewFilter, 虽说延迟加载不能用了, 但不会出现"打开的事务" 求解!

解决方案 »

  1.   

    OpenSessionInViewFilter 这个和事务的提交没关系吧
    这只是延长session,
    事务的提交事务管理器管理的,
    你使用了spring的事务管理器没?
      

  2.   

    OpenSessionInViewFilter是为了延长session生命周期,使得一个请求内使用同一个session。事务和session没有因果关系。
      

  3.   


    当然使用了, 我用的注解@Transactional
      

  4.   

    恩, 是这么一个用法, 但是OpenSessionInViewFilter应该改变了一些提交机制吧要不然, 不会出现: 在整个请求结束后, 执行查询的就有打开的事务, 
    而增删改, 这种真正有事务提交的, 反而处理正常若果去掉OpenSessionInViewFilter, 一切正常!
      

  5.   

    OpenSessionInViewFilter会延长session的生命周期,spring事务管理会在session销毁的时候才提交事务。所以,OpenSessionInViewFilter你要手动去提交事务,或增删改这3个方法就不能用这个过滤器。