天天看點

有關hibernate的緩存機制

今天遇到一個情況,就是在action層把實體對象查詢出來之後,由于在頁面中需要使用該實體對象中的一個值,就需要把該實體對象的某個屬性值改變,就調用了該實體類對象的setter方法,之後并沒有手動跟新該實體類對象,但是資料庫中的資料該實體類對象所對應的那條記錄中的該屬性值會自動發生改變。

這是因為,當我們從資料庫中把某個實體類對象查詢出來的時候,該對象是在hibernate的緩存中,hibernate自動跟新緩存,也就是說,緩存中查詢出來的所有對象(一個事物中的),hibernate都會判斷緩存中的對象是否被更新,如果被更新,hibernate就會自動去更新資料庫。

解決的辦法

一、

使用另一個對象來承載該資料,

二、

TblArchivesFieldSet fieldSet = new TblArchivesFieldSet();

org.apache.commons.beanutils.BeanUtils.copyProperties(fieldSet, fieldSet2);

......别的暫時沒有嘗試,不過可以試試怎麼把查詢出的資料變成遊離态試試,

繼續閱讀