成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hibernate flush機(jī)制的理解

開發(fā) 后端
針對昨天同事遇到的hibernate的問題。算是hibernate最基本的東西。具了解,這個問題很多人遇到過,也很常見,卻遇到了還經(jīng)常會懵了。為了加深印象,知其然,知其所以然。

針對昨天同事遇到的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ù)庫,他查詢的又是什么地方?

原文鏈接:http://www.cnblogs.com/yanbincn/archive/2012/05/31/2529293.html

責(zé)任編輯:林師授 來源: yanbin_new的博客
相關(guān)推薦

2009-09-23 16:30:01

Hibernate f

2009-09-25 16:08:12

Hibernate f

2009-09-24 16:13:05

Hibernate S

2009-06-29 08:50:20

Hibernate主鍵

2009-06-18 14:51:12

Hibernate緩存Hibernate

2009-06-17 15:43:03

Hibernate緩存

2009-09-23 14:23:51

Hibernate主鍵

2009-09-24 09:44:32

Hibernate j

2009-09-22 09:31:15

Hibernate主鍵

2009-09-25 09:14:35

Hibernate日志

2009-06-18 10:29:24

Hibernate I

2009-09-25 08:49:22

Hibernate集合

2009-09-25 12:59:53

Hibernate事務(wù)

2009-09-23 10:14:22

Hibernate

2017-02-14 13:08:45

2017-05-03 17:00:16

Android渲染機(jī)制

2024-06-21 08:32:24

2009-09-23 17:48:00

Hibernate事務(wù)

2009-07-02 09:38:17

Hibernate延時

2009-09-23 11:37:31

Hibernate S
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久国产精彩视频 | 亚洲 欧美 综合 | 国产一区二区三区四区五区加勒比 | 国产精品视频一区二区三区不卡 | 超碰激情 | 国产黄色在线 | 在线免费看91 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 日韩精品a在线观看图片 | 精品国产一区二区三区性色av | 国产在线播 | 亚洲国产二区 | 九九久久精品 | 天堂资源最新在线 | 黄色免费av| 成人国产精品免费观看视频 | 日韩一二三区 | 天堂成人国产精品一区 | 亚洲欧美国产一区二区三区 | 91福利在线导航 | 国产一区999| 天天看天天干 | 国产日韩一区二区三免费 | av黄色在线 | 性高湖久久久久久久久 | 中文字幕日韩欧美一区二区三区 | 日本高清在线一区 | 久久精品aaa| 在线观看亚洲专区 | 久久久久久毛片免费观看 | 谁有毛片 | 成人日韩精品 | 91影院 | 一区欧美| 中文字幕一区二区三区不卡 | 99精品视频网 | www.色综合| 欧美成人精品一区二区三区 | 国产成人jvid在线播放 | 欧美成人手机在线 | 亚洲日韩中文字幕一区 |