關於hibernate一級快取
阿新 • • 發佈:2018-12-24
近期,在專案中遇到關於一級快取的問題,剛開始百思不得解,經同事點播之後豁然開朗。
由於加解密的需求,專案中將剛查詢出的程式碼解密,解密後並沒有對其進行儲存或更新操作,然後執行完後資料在資料庫中卻有變化,實屬可疑。經多方考證,錯誤原因在於雖然查詢後沒有對其進行儲存或更新操作,但該查詢出的物件參與了其他更新操作;由於一級快取中查詢時物件處於遊離狀態,當遇到更新操作時,遊離狀態資料又轉換為持久化狀態資料隨更新操作一起更新。
程式碼如下:
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 ;
}
}
}