日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

对Flush原理的个人理解

發布時間:2025/7/14 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对Flush原理的个人理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PS:聽了尚學堂老師的課自己總結的,有錯誤的地方歡迎大家指正。

1.??????看一下session的結構。

l? Session中有一個actionQueue隊列,其中有幾個對象比如Insertions,deletetions等等。當執行完save(),delete()等操作之后,就把想要執行sql對象放在相應的對象中。

l? Session中還有一個persistenceContext,相當于緩存。在這之中有一個entityEntries,經過幾層目錄之后,發現還有一份sql執行對象,也就是說當session.save()等操作之后,實際上把要執行sql的對象放在了兩個地方。其中有個不同,在entityEntries中的,有個標識exsistsInDatebase,查看數據庫中有無記錄。

2.??????Flush工作原理:

l? 當執行flush之后,首先到actionQueue中,將要發出的sql語句發出,然后將actionQueue中與之對應的映射清空。然后到persistenceContext中,將exsistsInDatebase設置為true。要想把緩存清空需要調用evict()方法或者clear()方法。

l? 補充:如果先save(),再evict(),最后commit(),會出現問題。因為evict(),把緩存清空了,但是當執行commit()的時候會顯示的調用flush方法,發現在映射中存在,需要發出sql語句,但是需要在persistenceContext中找到與之對應的對象,并將exsistsInDatebase設置為true的時候發現對象沒了,所以會報錯。所以save()之后flush()一下就沒問題了。

3.??????關于Hibernate主鍵生成策略。

l? 主鍵生成策略采用的是uuid,調用完成save后,只是將user納入到了session的管理不會發出insert語句,但是id已經生成,session中existsInDatebase狀態為false。

l? 主鍵生成策略采用的是asign,同上不會發出insert語句。

l? 主鍵生成策略為native,調用session.save后,將執行insert語句,返回有數據庫生成的id,納入了session的管理,修改了session中existsInDatebase狀態為true。如果數據庫的隔離級別設置為為提交讀,那么我們可以看到save過的數據。


轉載于:https://www.cnblogs.com/hainange/archive/2012/04/13/6153650.html

總結

以上是生活随笔為你收集整理的对Flush原理的个人理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。