posts - 241,  comments - 116,  trackbacks - 0
          出現no session or session was closed這樣的異常不多解釋了,網上已經一大堆。
          但還是提不推薦把延遲加載特性去掉,而是必要時自己采取辦法得到想要的對象。這樣做更加靈活和效率高。雖然是避免不了一些代碼量。
          之前采取的方案是在session未關閉之前,把其他表對象查詢出來并且clone。不過現在無意中發現其實hibernate其實已經提供初始化的方法了,而未必自己去clone了。具體就是利用Hibernate.initialize() 這個方法。
          例子如下:
              /**
               * 獲取Prescription中其他擴展屬性對象。
               *
               * @param resultstruts2實現分頁按鈕
               */
              private void initializeProperties(PaginationSupport<Prescription> result) {
                  List<Prescription> items = result.getItems();
                  if (items != null && !items.isEmpty()) {
                      List<Prescription> persistenceList = new ArrayList<Prescription>(
                              items.size());
                      for (Prescription prescription : items) {
                          Hibernate.initialize(prescription.getOffice());
                          Hibernate.initialize(prescription.getDoctor());
                          Hibernate.initialize(prescription.getDoctor().getOffice());
                          Hibernate.initialize(prescription.getHospitalDistrict());
                          Hibernate.initialize(prescription.getPatient());
                          persistenceList.add(prescription);
                      }
                      result.setItems(persistenceList);
                  }
              }
          另還有種方法是采取spring的OpenSessionInViewFilter方法,把session關閉延遲到view層。不過我老是沒配成功 - -  view層get擴展表對象時還是提示no session。再說了還是覺得這樣的消耗有點大,因為把所有查詢的session關閉時間都加大了。很多時候只是某些查詢需要得到擴展表對象而已,沒必 要把全部查詢都影響到吧。
          posted on 2011-06-29 09:50 墻頭草 閱讀(2615) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          人人游戲網 軟件開發網 貨運專家
          主站蜘蛛池模板: 隆子县| 宜城市| 加查县| 景洪市| 略阳县| 铜川市| 山东省| 海口市| 永泰县| 滕州市| 德庆县| 青河县| 厦门市| 奉化市| 台州市| 罗山县| 抚顺县| 乌兰察布市| 铁力市| 卓资县| 萝北县| 嘉峪关市| 班玛县| 壤塘县| 奉节县| 长宁区| 锡林郭勒盟| 鄂托克旗| 稻城县| 城市| 九江市| 保亭| 广水市| 东港市| 休宁县| 阳谷县| 嘉荫县| 榆社县| 西乌珠穆沁旗| 玛多县| 吴旗县|