首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

spring中OpenSessionInViewFilter与SessionFactory.getCurrentSession()的摩擦

2013-06-26 
spring中OpenSessionInViewFilter与SessionFactory.getCurrentSession()的冲突spring中OpenSessionInViewF

spring中OpenSessionInViewFilter与SessionFactory.getCurrentSession()的冲突
spring中OpenSessionInViewFilter的问题:
如果在使用OpenSessionInViewFilter的时候在dao层使用的是SessionFactory.getCurrentSession(),
那么根据Hibernate中SessionFactory.getCurrentSession(),它会在事务提交的时候会关闭session,
如果是这样的话就跟OpenSessionInViewFilter延迟session的生命周期有些矛盾了。。。


[解决办法]

public final Session currentSession() throws HibernateException {  
      //从线程局部量context中尝试取出已经绑定到线程的Session  
      Session current = existingSession( factory );  
       
      //如果没有绑定到线程的Session  
      if (current == null) {  
         //打开一个”事务提交后自动关闭”的Session  
         current = buildOrObtainSession();  
            current.getTransaction().registerSynchronization(buildCleanupSynch() );  
         // wrap the session in thetransaction-protection proxy  
         if ( needsWrapping( current ) ) {  
            current = wrap( current );  
         }  
         //将得到的Session绑定到线程中:即以<SessionFactory,Session>键值对方式设置到线程局部量context  
         doBind( current, factory );  
      }  
      return current;  
   }
  
我觉得是这样,只有当前session为null时才会去创建“事务提交后自动关闭”的Session,而使用了OpenSessionInViewFilter的session在当前请求范围内不会为null
[解决办法]
上楼说的比较靠谱哦!

热点排行
Bad Request.