2017-03-02 26 views
0

是有可能manully添加鍵的Hibernate查詢緩存的地圖嗎?是否有可能爲Hibernate查詢緩存映射手動添加值?

請參考下面我的推理:

我有一個查詢,如下所示:

from UserTable as u where u.username="Dan" and password="123456" 

而結果查詢返回用戶提供的3

ID的第一查詢只執行一次,並加載到查詢緩存中。

現在,在第一個結果被緩存,我發出以下查詢

from UserTable as u where u.id=3 

將返回相同的用戶,但我從不同的網站,like so瞭解到,查詢將被視爲不同的查詢完全由緩存(如果我錯了,請糾正我的錯誤)。

有沒有辦法告訴Hibernate,這兩個查詢返回相同的數據?這樣做可以節省休眠時間,避免第二次點擊數據庫。

的理論解決方案,我能想到的是,issuning第一個查詢後,注入與第一查詢值到高速緩存中的第二個查詢,但我不知道這是可能的。

回答

2

有沒有辦法告訴Hibernate,這兩個查詢返回相同的數據? 編號

這樣做可以節省休眠時間,從而第二次啓動數據庫。 它不應該是一個大問題。查詢緩存旨在用於經常執行的查詢,因此一個執行更多不應該產生很大的差異。

我能想到的理論解決方案是,在發出第一個查詢之後,將第二個查詢與第一個查詢值一起注入緩存,但我不確定這是可能的。 理論上是可以的,但它是非常複雜的手工實現(緩存條目格式,時間戳緩存,與其他併發會話正確同步,等等)。

具體示例的解決方案是啓用UserTable實體的二級緩存,並使用session.load(UserTable.class, id)加載用戶而不是執行第二個查詢。這樣,用戶將從L2高速緩存中檢索,因爲它在第一個查詢中被加載到L2高速緩存中。

重要:如果你有大量的UserTable實體的記錄,無論你的任何疑問,也沒有實體UserTable應緩存。請查看blog,瞭解有關L2緩存的概述和最佳實踐。

相關問題