Junit与Spring集成测试

发表于:2010-7-29 15:08

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

分享:
    public void releaseSession(); {  
        if (!participate); {  
            if (isSingleSession();); {  
                // single session mode  
                TransactionSynchronizationManager.unbindResource(sessionFactory);;  
                logger.debug("Closing single Hibernate Session in HibernateLazyResolver");;  
                try {  
                    closeSession(session, sessionFactory);;  
                }  
                catch (RuntimeException ex); {  
                    logger.error("Unexpected exception on closing Hibernate Session", ex);;  
                }  
            }  
            else {  
                // deferred close mode  
                SessionFactoryUtils.processDeferredClose(sessionFactory);;  
            }  
        }  
    }  
     
    protected Session getSession(SessionFactory sessionFactory); throws DataAccessResourceFailureException {  
        Session session = SessionFactoryUtils.getSession(sessionFactory, true);;  
        // 注意这里与 OpenSessionInViewInterceptor 不同, 需要设置为 auto, 否则会导致以下异常  
        // org.springframework.dao.InvalidDataAccessApiUsageException:   
        // Write operations are not allowed in read-only mode (FlushMode.NEVER); -   
        // turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition
        session.setFlushMode(FlushMode.AUTO);;  
        return session;  
    }  
     
    protected void closeSession(Session session, SessionFactory sessionFactory); {  
        // 需要 flush session  
        session.flush();;  
        SessionFactoryUtils.releaseSession(session, sessionFactory);;  
    }  


  使用方法, 在配置文件中声明

<!-- use to resolve hibernate lazy load -->  
<bean id="hibernateLazyResolver" class="org.summerfragrance.support.hibernate3.HibernateLazyResolver">  
     <property name="sessionFactory"><ref local="sessionFactory"/></property>  
</bean>     
 
<bean id="userManager" parent="txProxyTemplate">  
     <property name="target">  
          <bean class="org.summerfragrance.security.service.impl.UserManagerImpl" parent="managerTarget">  
               <property name="userDAO"><ref bean="userDAO"/></property>  
               <property name="hibernateLazyResolver"><ref bean="hibernateLazyResolver"/></property>  
          </bean>  
     </property>  
</bean> 

  然后在代码中这样调用

hibernateLazyResolver.openSession();;  
...  
//需要 lazy load 的代码
hibernateLazyResolver.releaseSession();; 

32/3<123>
春暖花开更文季,点击参与还有惊喜礼品~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海漕溪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号