本機快取的網頁對ajax造成影響
我以前一直採用定義一個小的內容頁面作為返回內容的載體,來使用ajax
開發時候常遇到莫名奇妙的問題:明明所有的東西沒有一點錯誤了,但出來的結果仍然有問題或者和以前一樣。
我一直沒有搞明白怎麼回事,好在有一次我誤打誤撞,在遇到此類問題的時候清除了一次IE的本機快取,問題居然迎刃而解。
仔細想想大概是因為ajax請求返回的內容頁面雖然在表現的時候只是嵌入在主體的頁面中,但是還是被ie當作一個單獨頁面給存了一份,所以你在源碼處怎麼改,用戶端還是以之前的頁面為基礎產生返回內容。
我準備在內容頁面中加入
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
作為臨時的解決方案,每次關閉ie清該頁面的緩衝。
以後研究下不再靠網頁作為返回內容的載體,尋求其他方式。
[2008-8-13補充]這個問題其實有個最簡單的解決方案,即每次提交ajax 請求時,帶上一個每次都有變化的參數值就OK了,比如帶上 {_:+new Date}這組參數,就能保證每次ajax都取得最新的內容
學習hibernate得到的一些零散知識
VO 與 PO
VO在save以後,就成為PO,進入hibernate 持久化緩衝。
hibernate查詢方法傳回值也是PO。
在session關閉後,PO就變成VO。
當session.flush()時,會自動尋找所有改變過的PO,以此更新資料庫。
因此在 有OpenSessionInViewFilter的view層,改變bo中的值會直接影響到資料庫,很好的解釋了我以前遇到的怪問題。
何時是從持久層獲得資料的?
條件中查詢都是直接從資料庫得到資料,比如find方法。
指定主鍵ID來擷取單條資料或者迭代Iterate,是會先從持久層中尋找對應資料,找不到再去資料庫中找。
(這樣說來,在我們的項目中,持久化幾乎沒有起什麼作用阿...)
樂觀鎖與悲觀鎖
悲觀鎖是用setLockMode()方法指定的,放在查詢語句之前,查詢所得部分的資料將無法修改。
樂觀鎖在mapping配置中指定 Class 加一個屬性 optimistic-lock = "version"
最後還要加一個欄位 <version column="version" name="version" type="java.lang.Integer"/>
鎖的方法就像版本庫的控制一樣.
setFetchSize()和setMaxResult()
setMaxResult()返回的list中,只有指定數量的結果。
而setFetchSize()是這樣的,一次性向資料庫查詢的話,就只獲得指定數量的結果,當這些結果都被遍曆了,需要更多結果時,hibernate再向資料庫中讀入指定數量的新資料。
據此,我的理解是,setMaxResult主要用於分頁,而setFetchSize()則出於效能考量