<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    waterye

    OpenSessionInView模式

    Spring+Hibernate中,  集合映射如果使用lazy="true", 當(dāng)PO傳到View層時, 出現(xiàn)未初始化session已關(guān)閉的錯誤,只能在dao先初始化
    parent.getChilds().size();

    Spring提供Open Session In View來解決這個問題, 有兩種方式
    1. Interceptor
        <!-- =========== OpenSession In View pattern ==============-->
        
    <bean id="openSessionInViewInterceptor"
              class
    ="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
            
    <property name="sessionFactory" ref="sessionFactory"/>
        
    </bean>

        
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            
    <property name="interceptors" ref="openSessionInViewInterceptor"/>
            
    <property name="mappings">
                
    <props>
                ......
                
    </props>
            
    </property>
        
    </bean>
    2. Filter
    <web-app>
     
    <filter>
    <filter-name>hibernateFilter</filter-name>
    <filter-class>
    org.springframework.orm.hibernate.support.OpenSessionInViewFilter
    </filter-class>
    </filter>
     
    <filter-mapping>
    <filter-name>hibernateFilter</filter-name>
    <url-pattern>*.do</url-pattern>
    </filter-mapping>

    </web-app>

    說明: 個人更喜歡用Interceptor方式, filter是在web.xml中定義
    有了OpenSessionInView,并不是一切就ok了。簡單的crud可以,但對于復(fù)雜業(yè)務(wù)邏輯就要想點(diǎn)法子。

    OSIV默認(rèn)是request per session的, 所以即使沒有顯式update(po),Hibernate也會幫你保存的,dao的業(yè)務(wù)判斷就無效,還好有evict()可用。
    update code
    // Controller
    public ModelAndView update() {
        p 
    = dao.getVo(id);
        bindObject(request);
        dao.update(p);
    }

    // Dao
    public Object getVo(id) {
        p 
    = getHibernateTemplate().get(clazz, id);
        p.getChilds().size();
        getHibernateTemplate().evict(p);
        
    return p;
    }

    public void update(p) {
        oldP 
    = getVo(id);
        
    // ++--(oldP);
        getHibernateTemplate().update(p);
        
    // ++--(p);
    }

    posted on 2005-08-23 21:58 waterye 閱讀(5439) 評論(7)  編輯  收藏 所屬分類: spring

    Feedback

    # re: OpenSessionInView模式 2005-08-25 12:35 江南白衣@ITO

    load,get對evict()的影響呢?  回復(fù)  更多評論   

    # re: OpenSessionInView模式 2005-08-25 13:00 Water Ye@ITO

    load大概是從cache中查詢數(shù)據(jù), get是從db查詢數(shù)據(jù), 所以evict()要和get()結(jié)合來使用  回復(fù)  更多評論   

    # re: OpenSessionInView模式 2005-08-25 21:30 江南白衣@ITO

    網(wǎng)上講這種Open session in view 與 evict()結(jié)合的文章好象沒有阿,難道大家沒遇到同樣的問題,如果做ERP應(yīng)改很經(jīng)常遇到。  回復(fù)  更多評論   

    # re: OpenSessionInView模式 2005-08-25 21:38 Water Ye@ITO

    估計(jì)大家都沒有開OSIV吧  回復(fù)  更多評論   

    # re: OpenSessionInView模式 2005-08-29 17:16 Water Ye@ITO

    或許可以用Detached queries來代替evict()  回復(fù)  更多評論   

    # re: OpenSessionInView模式 2006-06-08 14:57 Ghost

    我項(xiàng)目中采用了OpenSessionInView!  回復(fù)  更多評論   

    # re: OpenSessionInView模式[未登錄] 2007-07-10 15:27 Chris

    p.getChilds().size();
    是做什么用的。  回復(fù)  更多評論   

    主站蜘蛛池模板: 亚洲成AV人片高潮喷水| 亚洲乱码卡三乱码新区| 成年网在线观看免费观看网址| 性xxxx视频播放免费| 亚洲色大成网站WWW国产| 最近最新MV在线观看免费高清| 亚洲黄色免费观看| 亚洲大片免费观看| 亚洲国产高清美女在线观看| 精品国产污污免费网站aⅴ| 亚洲视频在线观看一区| 最近中文字幕免费mv在线视频| 久久夜色精品国产噜噜噜亚洲AV| 99久热只有精品视频免费看 | 免费一级特黄特色大片在线| 久久久久亚洲精品无码网址色欲| 永久黄网站色视频免费观看| 国产成人精品日本亚洲语音| 国产日韩成人亚洲丁香婷婷| 野花香高清视频在线观看免费| 亚洲国产香蕉碰碰人人| 亚洲中文无码永久免费| 美女视频黄频a免费| 亚洲爽爽一区二区三区| 免费一级不卡毛片| 亚洲日本乱码卡2卡3卡新区| 国产精品免费视频一区| 中文字幕乱码系列免费| 亚洲网站在线播放| 国产精品va无码免费麻豆| 久久九九久精品国产免费直播| 日韩亚洲AV无码一区二区不卡| 免费精品一区二区三区在线观看| 一区二区三区视频免费观看| 在线免费观看亚洲| 日本成人在线免费观看 | 久久午夜夜伦鲁鲁片免费无码影视| 亚洲国产成人精品无码区在线秒播| 四虎www成人影院免费观看| 精品一区二区三区免费视频| 亚洲成在人线中文字幕|