1. 程式人生 > >關於hibernate一級快取

關於hibernate一級快取

近期,在專案中遇到關於一級快取的問題,剛開始百思不得解,經同事點播之後豁然開朗。

由於加解密的需求,專案中將剛查詢出的程式碼解密,解密後並沒有對其進行儲存或更新操作,然後執行完後資料在資料庫中卻有變化,實屬可疑。經多方考證,錯誤原因在於雖然查詢後沒有對其進行儲存或更新操作,但該查詢出的物件參與了其他更新操作;由於一級快取中查詢時物件處於遊離狀態,當遇到更新操作時,遊離狀態資料又轉換為持久化狀態資料隨更新操作一起更新。

程式碼如下:

List<Bean> result = testBiz.findBy("dbclick", despname,
      destel, desmobile, cardid,gateType,descountry);


if (result != null && result.size() > 0) {
   for(int j=0;j<result.size();j++){
      if((despname.equals(result.get(j).getPersonName()) && (cardid.equals(result.get(j).getCardNo())
            || destel.equals(result.get(j).getTelephone()) ||desmobile.equals(result.get(j).getTelephone())))){
         // 如果ok表裡面存在資料
         String cardNo = result.get(j).getCardNo();
         String cardType = result.get(j).getCardType();
         iTestDao.updateOriginalDataByCard(bno, cardNo,
               cardType);

         break ;
      }
   }
}