一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 深入理解Hibernate中的flush機制

深入理解Hibernate中的flush機制

2019-12-08 21:03junjie JAVA教程

這篇文章主要介紹了深入理解Hibernate中的flush機制,本文是對flush機制深入研究得出的一些結論總結,需要的朋友可以參考下

針對昨天同事遇到的hibernate的問題。算是hibernate最基本的東西。具了解,這個問題很多人遇到過,也很常見,卻遇到了還經常會懵了。

為了加深印象,知其然,知其所以然。

之后單純用原始的Hibernate框架做了一些驗證,并且打開執行SQL打印輸出臺的,得出的結論:

前提是在同一事務中間:

1、利用sql語句, session.createSQLQuery(sql).executeUpdate();進行插入,輸出臺打印出sql插入語句; 再利用sql語句,進行session.createSQLQuery(sql).uniqueResult(); 也會打印SQL查詢語句,沒有問題,可以查詢到數據。

2、利用hibernate封裝操作, session.save(entity); 進行插入,輸出臺并沒有打印出插入的SQL語句, 再利用 session.get(entity,id);方法做查詢 ;也沒有打印出SQL查詢語句,但是是可以查詢到數據的。到執行事務提交語句時,插入的SQL語句被打印出來

3、利用hibernate的session.save(entity); 進行插入,再利用《HQL》語句進行查詢,效果同上面第二點。

4、利用hibernate的session.save(entity); 進行插入,輸出臺并沒有打印出插入的SQL語句。 再利用sql語句,進行session.createSQLQuery(sql).uniqueResult(); 會打印SQL查詢語句。問題出現了,查詢不到任何數據。這種情況下利用session.flush()方法,在查詢之前執行到flush()方法,輸出臺會打印出插入的SQL語句。 再進行查詢就有數據。

驗證完成之后,查了下往上資料,對于第四點,在開發過程中出現頻繁,非常的常見,相信很多人都曾遇到,但又有很多人繼續摸不到頭腦。正好以此加深了印象。

從打印控制臺SQL可以看出一個基本的hibernate save方法的操作流程:

1. 判斷所要保存的實例是否已處于持久化狀態,如果不是,則將其置入緩存;

2. 根據所要保存的實例計劃一條insert sql語句,注意只是計劃,并不執行;

3. 事務提交時執行之前所計劃的insert語句;

將tx.commit()換成session.flush,此時控制太打印出了insert語句,但是數據庫中并沒有添加新的記錄;

flush方法的主要作用就是清理緩存,強制數據庫與Hibernate緩存同步,以保證數據的一致性。它的主要動作就是向數據庫發送一系列的sql語句,并執行這些sql語句,但是不會向數據庫提交。而commit方法則會首先調用flush方法,然后提交事務。這就是為什么我們僅僅調用flush的時候記錄并未插入到數據庫中的原因,因為只有提交了事務,對數據庫所做的更新才會被保存下來。因為commit方法隱式的調用了flush,所以一般我們都不會顯示的調用flush方法。

這是hibernate的flush機制。在一些復雜的對象更新和保存的過程中就要考慮數據庫操作順序的改變以及延時flush是否對程序的結果有影響。如果確實存在著影響,那就可以在需要保持這種操作順序的位置加入flush強制Hibernate將緩存中記錄的操作flush入數據庫,這樣看起來也許不太美觀,但很有效。

疑問:session.save方法,放入緩存中,SQL直接查詢數據庫是查不出來的。

flush()方法之后,會打印出執行SQL,但是數據庫中,還是沒有。SQL直接查詢卻能查出數據來。

1、flush() 之后這個實體數據存放在什么地方?和save()方法一樣的緩存,那SQL也應該是取不到的。

2、既然flush方法之后數據沒有進數據庫,SQL直接查詢,利用session.createSQLQuery(sql) 查詢,直接查得應該不是數據庫,他查詢的又是什么地方?

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 白丝校花被扒开双腿喷水小说 | 色在线影院 | avtt一区| 久久综合视频网站 | 免费看黄色大片 | 91亚洲视频在线观看 | 欧洲女同同性videos0 | 天天操天天舔 | 撕开老师的丝袜白丝扒开粉嫩的小 | 我和岳偷长篇小说 | 国产亚洲精品第一综合linode | 天堂色| 猥琐对着美女飞机喷到脸上 | 免费真实播放国产乱子伦 | 欧洲第一区第二区第三区 | 玩高中女同桌肉色短丝袜脚文 | 哇嘎在线精品视频在线观看 | 91久久偷偷做嫩草影院免费 | 国产福利一区二区三区 | 国产在线精品99一卡2卡 | 日本不卡一区二区三区在线观看 | 99久久精品免费精品国产 | 蜜色网| 日韩日韩日韩手机看片自拍 | 青草青草视频 | 波多野结衣xxxxx在线播放 | 国产成人一区二区三区视频免费蜜 | 国产欧美成人免费观看 | haodiaocao几万部精彩视频 | 久久青草费线频观看国产 | 免费精品在线视频 | 魔镜号中文字幕 | 日本高清在线观看天码888 | 天天白天天谢天天啦 | 久久99国产综合精品AV蜜桃 | 动漫美丽妇人1~2在线看 | 91精品国产91久久久久久麻豆 | 亚洲黑人巨大videos0 | 日本最新免费二区 | china外卖员gay帮口 | 91香蕉导航 |