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


 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~分割線~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 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():清理緩存。

參考: https://blog.csdn.net/qq_27739989/article/details/51407351。圖片: https://blog.csdn.net/chuck_kui/article/details/51531089

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM