hibernate中flush()、refresh()、clear()緩存操作

轉自:https://blog.csdn.net/qq_27739989/article/details/51407351

flush():使數據庫中的對象和session緩存中的對象的狀態保持一致。爲了保持一致,則可能發送對應的sql語句(若緩存中的對象和數據庫中的對象一樣則不發送sql語句)。

1、在transaction的commit()方法中:先調用session的flush方法,再提交事務。

2、flush方法可能會發送sql語句,但不會提交事務。

3、注意:在未提交事務或顯示的調用session.flush()方法之前,也有可能會進行flush()操作。

1)在執行HQL或QBC查詢,會先進行flush()操作以得到數據表的最新的記錄。

2)若記錄的id是由底層數據庫使用自增的方式生成的,則在save()方法後,就會立即發送insert語句,因爲save()方法後必須保證對象的id是存在的。

commit()和flush的區別:flush執行一系列sql語句但不提交事務;commit()先調用flush()方法再提交事務,提交事務意味着對數據庫操作永久保存下來。

refresh():會強制發送select語句,以使session緩存中對象的狀態和數據表中對應的記錄保持一致。該方法的有效性需要配置事務的隔離級別爲read commited(讀已提交),
在hibernate.cfg.xml文件中配置

<property name="connection.isolation">2</property>

clear():清理緩存

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章