最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解Hibernate中的flush機(jī)制

 更新時間:2015年01月15日 11:15:21   投稿:junjie  
這篇文章主要介紹了深入理解Hibernate中的flush機(jī)制,本文是對flush機(jī)制深入研究得出的一些結(jié)論總結(jié),需要的朋友可以參考下

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

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

之后單純用原始的Hibernate框架做了一些驗(yàn)證,并且打開執(zhí)行SQL打印輸出臺的,得出的結(jié)論:

前提是在同一事務(wù)中間:

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

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

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

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

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

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

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

2. 根據(jù)所要保存的實(shí)例計(jì)劃一條insert sql語句,注意只是計(jì)劃,并不執(zhí)行;

3. 事務(wù)提交時執(zhí)行之前所計(jì)劃的insert語句;

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

flush方法的主要作用就是清理緩存,強(qiáng)制數(shù)據(jù)庫與Hibernate緩存同步,以保證數(shù)據(jù)的一致性。它的主要動作就是向數(shù)據(jù)庫發(fā)送一系列的sql語句,并執(zhí)行這些sql語句,但是不會向數(shù)據(jù)庫提交。而commit方法則會首先調(diào)用flush方法,然后提交事務(wù)。這就是為什么我們僅僅調(diào)用flush的時候記錄并未插入到數(shù)據(jù)庫中的原因,因?yàn)橹挥刑峤涣耸聞?wù),對數(shù)據(jù)庫所做的更新才會被保存下來。因?yàn)閏ommit方法隱式的調(diào)用了flush,所以一般我們都不會顯示的調(diào)用flush方法。

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

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

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

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

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

相關(guān)文章

  • Java中的HashMap弱引用之WeakHashMap詳解

    Java中的HashMap弱引用之WeakHashMap詳解

    這篇文章主要介紹了Java中的HashMap弱引用之WeakHashMap詳解,當(dāng)內(nèi)存空間不足,Java虛擬機(jī)寧愿拋出OutOfMemoryError錯誤,使程序異常終止,也不會靠隨意回收具有強(qiáng)引用的對象來解決內(nèi)存不足的問題,需要的朋友可以參考下
    2023-09-09
  • Java常見啟動命令-jar、-server和-cp詳細(xì)比較

    Java常見啟動命令-jar、-server和-cp詳細(xì)比較

    這篇文章主要給大家介紹了關(guān)于Java常見啟動命令-jar、-server和-cp詳細(xì)比較的相關(guān)資料,該文總結(jié)了常歸的jar包的啟動方式,并分析各種啟動方式的區(qū)別,需要的朋友可以參考下
    2023-07-07
  • Java創(chuàng)建ZIP壓縮文件的方法

    Java創(chuàng)建ZIP壓縮文件的方法

    這篇文章主要介紹了Java創(chuàng)建ZIP壓縮文件的方法,實(shí)例分析了java創(chuàng)建zip文件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Java?mybatis?開發(fā)自定義插件

    Java?mybatis?開發(fā)自定義插件

    這篇文章主要介紹了Java?mybatis開發(fā)自定義插件,MyBatis允許你在映射語句執(zhí)行過程中的某一點(diǎn)進(jìn)行攔截調(diào)用,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • SpringBoot_Cache自定義使用SimpleCacheManager方式

    SpringBoot_Cache自定義使用SimpleCacheManager方式

    這篇文章主要介紹了SpringBoot_Cache自定義使用SimpleCacheManager方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • RocetMQ搭建步驟與問題解決之道

    RocetMQ搭建步驟與問題解決之道

    這篇文章主要給大家介紹了關(guān)于RocetMQ搭建步驟與問題解決之道的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 分享一個安卓的內(nèi)置多種工具類的Activity

    分享一個安卓的內(nèi)置多種工具類的Activity

    這篇文章主要介紹了分享一個安卓的內(nèi)置多種工具類的Activity的相關(guān)資料,需要的朋友可以參考下
    2015-04-04
  • Java判斷文件或者文件夾是否存在的功能(不存在創(chuàng)建,存在刪除)

    Java判斷文件或者文件夾是否存在的功能(不存在創(chuàng)建,存在刪除)

    在Java中,要判斷文件或文件夾是否存在,并根據(jù)判斷結(jié)果來執(zhí)行創(chuàng)建或刪除操作,你可以使用java.io.File類或者java.nio.file包中的類,本文介紹Java判斷文件或者文件夾是否存在,不存在創(chuàng)建,存在刪除,感興趣的朋友一起看看吧
    2025-03-03
  • windows 32位eclipse遠(yuǎn)程hadoop開發(fā)環(huán)境搭建

    windows 32位eclipse遠(yuǎn)程hadoop開發(fā)環(huán)境搭建

    這篇文章主要介紹了windows 32位eclipse遠(yuǎn)程hadoop開發(fā)環(huán)境搭建的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • Java字符判斷的小例子

    Java字符判斷的小例子

    從鍵盤上輸入一個字符串,遍歷該字符串中的每個字符,若該字符為小寫字母,則輸出“此字符是小寫字母”;若為大寫字母,則輸出“此字符為大寫字母”;否則輸出“此字符不是字母”
    2013-09-09

最新評論

涟水县| 邹平县| 新密市| 新竹市| 天柱县| 湖南省| 卓资县| 腾冲县| 德保县| 永昌县| 恩施市| 太仓市| 中方县| 林西县| 青浦区| 保康县| 外汇| 电白县| 会理县| 安国市| 娱乐| 武清区| 林西县| 大洼县| 绥滨县| 巴林左旗| 于田县| 罗甸县| 蓬安县| 中卫市| 桂平市| 万安县| 淄博市| 锦州市| 阿拉善左旗| 久治县| 邹平县| 祁连县| 仙游县| 施秉县| 昭通市|