hibernate的Query查詢的快取的問題

2021-08-31 21:59:14 字數 1005 閱讀 7880

本文章是比較膚淺的hibernate快取理解,快取使用的不好會造成1+n查詢的問題,會很浪費資料庫資源。快取不提倡什麼方法都使用,我覺得只有真正需要的地方才少量使用比較適合。

最近在檢查hibernate的hql語句,發現我使用的hibernate的快取查詢方法出現了奇怪的問題。

我的快取查詢方法核心**如下:

session.setcachemode(cachemode.normal);//hibernate的session

query q = session.createquery(hql);//hibernate的query

q.setcacheable(true);//設定使用快取,預設不使用

這樣每次呼叫該方法進行查詢時就會使用快取(如果你的po配置了快取的話)

我使用hibernate的2表關聯查詢 from a,b where a.id=b.id and a.type=?

而b則沒有,結果第一次查詢語句輸出沒什麼問題,但是第二次開始,後台的輸出每次重新整理頁面都會有類似:

select b.id,b.name.b.age ..... from b where b.id=?
這樣的語句輸出。我覺得很奇怪,以為語句出問題了,因為要輸出語句應該也是輸出2表關聯查詢的語句才對,怎麼單獨出現查詢其中乙個表的sql語句呢?難道我的多表關聯查詢沒作用??後來我把快取的使用關閉,也就是

q.setcacheable(false);//不使用快取
這樣測試,控制台輸出的都是關聯2個表查詢的sql語句,這樣說來關聯查詢是正常使用的,而一旦使用了快取,則只會出現乙個表單獨再查的情況。後來仔細分析發現原來開啟了快取查詢,而沒有把被查詢的物件po設定

就不再出現單查b的語句了,因為都有快取了。直接從快取中讀取資料,直到快取消失。

初學Hibernate之Query擴充套件

1 hql引數化查詢,不明確值型別的用setparameter方法 明確查詢結果為一條記錄的用uniqueresult方法查詢 注意,引數化查詢中方法setstring 或 setparameter如果使用索引方式賦值,索引值從0開始,區別jdbc public void func1 2 hql分頁...

query 相關操作

每一次操作select的時候,總是要出來翻一下資料,不如自己總結一下,以後就翻這裡了。比如 1 設定value為pxx的項選中 selector val pxx 2 設定text為pxx的項選中 selector find option text pxx attr selected true 這裡有...

mongotemplate 動態query拼接

在用mongodb的時候進行分詞搜尋 使用ik分詞器對查詢條件進行分詞比如 男士9分休閒褲。使用mongotemplate 對分詞結果進行查詢。query query newquery criteria criteria newcriteria keywords是需要查詢的內容,對keywords進...