- tx commit時
- 查詢前
- 明確呼叫session.flush()
可以用session.setFlushMode()設定flush執行時機:
- FlushMode.AUTO:預設值,執行時機為tx commit時、查詢前與明確呼叫session.flush()。
- FlushMode.COMMIT:執行時機為tx commit時與明確呼叫session.flush(),少了查詢前這一項,會出現查詢到『stale data』的情況,因為在執行查詢時,session的cache可能已經有些被修改但未flush到db的資料,這些異動資料是查詢不到的。
- FlushMode.MANUAL:執行時機只有明確呼叫session.flush()。
flush之後,可以從db查詢的到,表示已經進db了,但是若在flush之後發生錯誤導致rollback,那些已經被flush進db的能否rollback呢?經過測試,flush進db的資料是可以被rollback的。
沒有留言:
張貼留言