1.clear方法:無論是load還是get,都會首先查找緩存(一級緩存),如果沒有,才會去資料庫查找,調用clear()方法可以強制清除session緩存。
示例:
根據load隻在請求時發出sql語句的原理,按理說hibernate應該發出兩條語句,但是發現隻發出來一條sql語句,原因就是get和load首先從緩存中查找資訊,如果緩存中沒有,才去資料庫中查找資訊。本例中id号為1的屬性在緩存中已經存在,load無需再向資料庫查詢。如果在中間加clear方法,清除緩存中的資訊,那就要發出兩條sql去查詢了。
2.flush方法:可以強制進行從記憶體到資料庫的同步!
隻發出來一條sql語句,是在commit時發出的。你在commit之前就算改一百次,最後隻是在commit才會跟新,原因是你一直在緩存裡面修改,hibernate并沒有在commit之前将緩存中的資料與資料庫中的資料同步。加了flush方法之後,就會強制緩存中的内容與資料庫同步。
flush方法的補充(不重要):flush是在什麼時間去進行資料庫的同步的?也就是怎麼利用flush。
有session.setflushmode(flushmode.xxx);
這裡的xxx有:always(不論執行任何語句都會flush)、auto(自動flush,預設的狀态)、commit(送出的時候flush)、manual(手動的flush)、never(永遠不flush)。
搞這些的用處就是,在調節性能的時候會用。比如說我們現在拿出的結果集隻是讀,那就沒有必要flush了,可以設為always。
但是flushmode模式很少用到。
find相當于select,去取出對象,但是已經過時。
轉載請注明出處:http://blog.csdn.net/acmman